2010-02-25 250 views
0

我有一个Web应用程序,它试图确定人们何时参加活动。使用Django处理考勤数据

class Attendee(models.Model): 
    location = models.ForeignKey(Location) 
    user = models.ForeignKey(User) 
    checked_in = models.DateTimeField() 
    checked_out = models.DateTimeField() 
    last_active = models.DateTimeField() 

每当他们登录到特定位置时都会签入参加者,并且每当他们退出时都会签出参与者。

问题是,确定什么时候有人被“检出”,因为他们可能不会主动退出Django用户系统,我必须找到一种方法将他们注册为24小时后检出。

目前,我正在使用一个非常简单的ORM查询在管理器中列出站点上的“活动”和“非活动”用户。

expires = datetime.datetime.today() - datetime.timedelta(seconds=settings.AUTO_CHECKOUT_AFTER) 
# Get people who were last active more than 24 hours ago OR who have checked out 
inactive_users = User.objects.all().filter(Q(attendee__last_active__lt = expires) \ 
       | Q(attendee__checked_out__lte = datetime.datetime.now()), \ 
       attendee__location=location).exclude(attendee__checked_out = None, attendee__checked_in__gte = expires).distinct() 

有什么更好的方法来做到这一点?我猜想需要一个相当于CRON作业的Django来自动检出不活动的用户。

回答

1

你不需要'等同于cron作业的'Django,你只需要一个cron作业。

cron应该运行一个独立的Django脚本 - 你可以用几种不同的方法做到这一点,但最简单的方法是创建一个standalone ./manage.pycommand