我的网站允许用户在网站上发布有效期限的内容。商品到期后,它将不再显示在商品详情中。帖子也可以关闭,取消或完成。我认为能够检查一个属性或状态(“处于活动状态”)而不是检查[未过期,未完成,未关闭,未被取消]将是最好的。处理剩下的这些很容易,因为我可以只有一个“状态”字段,实际上是一个枚举,但是AFAIK,一旦该时间发生就不可能将状态设置为“已过期”。人们通常如何处理这个问题?
编辑:我不是问如何编写查询来查找过期的项目;我问我怎样才能找到“活动”(满足其他几个布尔条件的未到期项目),而不必每次都想找到它们时使用一个大讨厌的查询。
答案 0 :(得分:1)
使该项目包含birth
和death
(类型:日期)列和status
列(已完成,已删除,已过期...)。
当您想要逻辑地结束项目的生命周期时(无论出于何种原因:到期,完成,......),更新/填写death
列。相应地更新status
列。
查询活动项(在伪SQL中):
select * from mytable where birth <= todays_date <= death or death is null
答案 1 :(得分:1)
我认为可以使用cronjob和django custom management command进行管理,这只是一个想法。
答案 2 :(得分:0)
听起来,到期日期/时间是您需要实际存储并根据其进行决策的字段。 IsActive听起来像是你根据有效期和可能的其他字段动态计算的东西(尽管很痛苦)
如果某个字段不是某个其他信息(如过期日期)的产品,那么IsActive可能会更好地工作,但它本身是有效的,例如,如果用户手动将状态设置为“活动”或“不是”活性”。