在数据库中,我有一个名为date的字段。有没有办法在日期过后删除一行,以便它不再出现?我已经尝试将它与视图中的今天日期进行比较,但这并不是每天都会发生的,人们仍会在第一页加载时看到它。有什么想法吗?
答案 0 :(得分:2)
由于许多原因,从数据库中删除某些内容并不安全。从权限转到on_delete
逻辑。如果您不确定是否完全需要删除某些内容,只需将此行标记为active=false
即可。
我不建议使用cron
,因为它难以维护:您必须手动在不同环境中设置不同的任务,将这些文件复制到VCS上的某个位置,使用bash
代替{ {1}}。
此外,在讨论事件时,我不建议在您的数据库中存储这样的内容,因为它不受VCS控制且难以维护。
如果您的应用非常简单,schedule是一个选项。
但如果你正在寻找一些额外的信息,如:
您可以在启用python
的情况下转移到更复杂的Celery
。额外的依赖关系(如Beat
,Redis
)是主要的缺点。
文档:
相关:
答案 1 :(得分:0)
我认为最好的方法是使用Cron作业或在视图中使用附加条件,以便在上述日期之后仅显示行。
答案 2 :(得分:0)
我建议你使用mysql事件,因为它会不断运行,不像只触发数据库操作的触发器。您希望这发生在应用程序中发生的任何事情之外,仅基于时间,因此mysql事件将适用于此场景。请参阅此处的完整教程:http://www.sitepoint.com/working-with-mysql-events/
答案 3 :(得分:0)
我有一个更简单的方法,我想你可以称之为“硬编码”。我创建了一个名为deleteevent的函数,它具有以下代码
def deleteevent():
yesterday = date.today() - timedelta(1)
if Events.objects.filter(event_date = yesterday).count():
Events.objects.filter(event_date = yesterday).delete()
然后,在我所有的其他功能中,我在开头调用了这个,所以在加载页面之前会删除该事件