2010-02-25 35 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