2010-06-16 45 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