2010-06-16 71 views
2

我的網站允許用戶在網站上張貼有效期限的東西。一旦項目過期,它將不再顯示在列表中。帖子也可以關閉,取消或完成。我認爲能夠檢查一個屬性或狀態(「活動」)而不是檢查[未未過期,未完成,未關閉,未取消]將是最好的。處理其餘部分很簡單,因爲我可以只有一個「狀態」字段,它本質上是一個枚舉類型,但是AFAIK,只要這個時間發生就不可能將狀態設置爲「過期」。人們通常如何處理這個問題?如何處理過期物品?

編輯:我不問如何編寫查詢來查找過期的項目;我在問我怎樣才能找到「活躍」(滿足其他布爾條件的未過期項目),而不必在每次我想找到它們時都使用一個很大的討厭查詢。

回答

1

我認爲可以用cronjob和django custom management command來管理,這只是一個想法。

+0

哦...我一直在通過從我的python腳本手動設置Django環境來做到這一點,但是我認爲將它放入'manage.py'命令會更有意義。好建議! – mpen 2010-06-16 22:09:46

1

使項目具有birthdeath(類型:日期)列和status列(已完成,已刪除,將過期...)。

當您想從邏輯上結束項目的生命週期(無論出於何種原因:過期,完成,...)時,更新/填寫death列。相應地更新status列。

查詢有效項目(以僞SQL):

select * from mytable where birth <= todays_date <= death or death is null 
+0

是的....查詢未過期的項目很容易,這不是問題。你是否建議我使用cronjob來更新狀態或什麼?那裏/將會如何發生? – mpen 2010-06-16 21:50:31

+0

也許我誤解了這個問題,但將'death'列設置爲'expiry_date'並將狀態設置爲'to_be_expired'應該有效,不是嗎? – ChristopheD 2010-06-16 21:52:34

+0

是的,我想你誤解了這個問題。找出項目是否過期很容易。我問的是,如何在每次查詢時都找到所有「主動」項目,而不必使用大的條件混亂?即每次運行此查詢時無需檢查半打狀態以及日期範圍。 – mpen 2010-06-16 22:04:05

0

這聽起來像過期日期/時間,你需要真正的存儲,並根據關的決策領域。 IsActive聽起來像是根據有效日期和其他字段即時計算的東西(儘管它很痛苦)

IsActive作爲一個字段可能會更好,如果它不是一些其他信息的產物過期日期,但是自己有效,例如用戶手動將狀態設置爲「活動」或「不活動」。

+0

是啊......但它*是許多因素的產物。我可以讓它成爲一個Python屬性,但只適用於單個項目,我無法針對「活動項目」運行查詢。 – mpen 2010-06-16 22:06:22