我有这样一个模型:
class FooBar(models.Model):
createtime = models.DateTimeField(auto_now_add=True)
lastupdatetime = models.DateTimeField(auto_now=True)
我想覆盖某些模型实例的两个日期字段(在迁移数据时使用)。当前的解决方案如下所示:
for field in new_entry._meta.local_fields:
if field.name == "lastupdatetime":
field.auto_now = False
elif field.name == "createtime":
field.auto_now_add = False
new_entry.createtime = date
new_entry.lastupdatetime = date
new_entry.save()
for field in new_entry._meta.local_fields:
if field.name == "lastupdatetime":
field.auto_now = True
elif field.name == "createtime":
field.auto_now_add = True
有没有更好的解决方案?
最佳答案
我最近在测试我的应用程序时遇到了这种情况。我需要“强制”过期的时间戳。就我而言,我通过使用查询集更新来解决问题。像这样:
# my model
class FooBar(models.Model):
title = models.CharField(max_length=255)
updated_at = models.DateTimeField(auto_now=True, auto_now_add=True)
# my tests
foo = FooBar.objects.get(pk=1)
# force a timestamp
lastweek = datetime.datetime.now() - datetime.timedelta(days=7)
FooBar.objects.filter(pk=foo.pk).update(updated_at=lastweek)
# do the testing.
关于python - 暂时禁用 auto_now/auto_now_add,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7499767/