python - 暂时禁用 auto_now/auto_now_add

标签 python django datetime

我有这样一个模型:

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/

相关文章:

c# - 如果属性为空,则在字符串中写入 "?"

PHP DateTime->diff() 不能正常工作

java - 确定时间是满小时还是半小时

python - 我的华氏度到摄氏度/开尔文转换器有问题

python - 比 COCO 具有更多类的预训练对象检测模型

django admin 仅当复选框为 false 时才显示字段

python - 如何使用 Django REST Framework 读取数据、应用函数并返回结果?

python - 如何使用 Python namedtuples 将行插入 mySQL 数据库

python - Pandas isin() 函数无法正确识别数字匹配

python - django 1.10 在解析模板 'is_popup' 中的变量 'admin/login.html' 时出现异常