我在Django中有一个模型,它包含一些月后无关的数据。 有一种方法可以在一段时间后自动删除它吗?
数据库是MySQL,如果重要的话,我无法判断这是否在数据库方面完成(也许是通过MySQL配置它的方式?),或者在我的后端代码。
是否有快速解决方案,或者我是否必须编写执行此操作的代码,并让它每天运行,删除一个月前未添加的内容?
由于
答案 0 :(得分:5)
我建议创建一个管理命令,查询模型中超过一个月的所有记录并删除这些记录。然后将该管理命令放入每日cronjob中。这应该符合您的需求。
答案 1 :(得分:2)
你可以解决这个问题取决于你的情况, 如果此数据没有任何值,您想删除它 你可以通过
来做到这一点1-来自数据库&使用crontab
删除mytable WHERE date_field< UNIX_TIMESTAMP(DATE_SUB(NOW(),INTERVAL 30天));
2-使用带有crontab的管理命令
导入日期时间
samples = Sample.objects.filter(sampledate__gt = datetime.date(2011,1, 1),sampledate__lt = datetime.date(2011,1,31))
3-使用芹菜定期任务
http://celery.readthedocs.org/en/latest/userguide/periodic-tasks.html
答案 2 :(得分:1)
您可以随时让经理过滤:
class RecentManager(models.Manager):
def get_queryset(self):
return super(
RecentManager,
self
).get_queryset().filter(
your_timestamp__gt=datetime.datetime.now()-datetime.timedelta(30)
)
class YourModel(models.Model):
#your fields, including your_timestamp
objects = RecentManager()
unrestricted = models.Manager()
@static
def delete_old():
YourModel.unrestricted.filter(
your_timestamp__lt=datetime.datetime.now()-datetime.timedelta(30)
).delete()
将删除连接到管理命令,您可以在cronjob或Celery任务中运行该命令,或者您可以使用其他基础结构进行异步执行。