【问题标题】:How to handle expired items?如何处理过期物品?
【发布时间】:2010-06-17 06:14:07
【问题描述】:

我的网站允许用户在网站上发布具有有效期的内容。商品过期后,将不再显示在列表中。帖子也可以关闭、取消或完成。我认为最好能够检查一个属性或状态(“处于活动状态”)而不是检查[未过期,未完成,未关闭,未取消]。处理其余的很容易,因为我可以只有一个“状态”字段,它本质上是一个枚举,但是 AFAIK,一旦发生,就不可能将状态设置为“过期”。人们通常如何处理这个问题?

编辑:我不是在问如何编写查询来查找过期项目;我在问我如何才能找到“活动”(满足一些其他布尔条件的未过期项目),而不必每次我想找到它们时都使用一个大的讨厌的查询。

【问题讨论】:

    标签: django database-design


    【解决方案1】:

    我认为可以用 cronjob 和django custom management command 来管理,只是一个想法。

    【讨论】:

    • 哦...我一直在通过从我的 python 脚本手动设置 Django 环境来做到这一点,但我想将它塞进manage.py 命令更有意义。好建议!
    【解决方案2】:

    使项目具有birthdeath(类型:日期)列和status 列(已完成、已删除、即将过期...)。

    当您想以逻辑方式结束项目的生命周期(无论出于何种原因:到期、已完成......)时,请更新/填写 death 列。相应地更新status 列。

    查询活动项(在伪 SQL 中):

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

    【讨论】:

    • 是的....查询未过期的项目很容易,这不是问题。您是建议我使用 cronjob 来更新状态还是什么?这会在哪里/如何发生?
    • 也许我误解了这个问题,但是将death 列设置为expiry_date 并将状态设置为to_be_expired 应该可以解决问题,不是吗?
    • 是的,我想你误解了这个问题。查明物品是否过期很容易。我要问的是如何找到所有“活动”项目,而不必每次要查询时都使用大量的条件混乱?即,每次运行此查询时都无需检查六个状态以及日期范围。
    【解决方案3】:

    听起来到期日期/时间是您需要实际存储和做出决策的字段。 IsActive 听起来像是您可以根据到期日期和可能的其他字段即时计算的东西(即使它很痛苦)

    如果 IsActive 不是由其他一些信息(如到期日期)产生的结果,但它本身是有效的,例如用户手动将状态设置为“活动”或“非活动”,则 IsActive 作为一个字段可能会更好地工作活跃”。

    【讨论】:

    • 是的...但它多种因素的产物。我可以将其设为 Python 属性,但这仅适用于单个项目,那时我无法运行“活动项目”查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多