【问题标题】:How to set only the hour for a django DateTimeField using update如何使用更新仅为 django DateTimeField 设置小时
【发布时间】:2017-12-29 20:47:08
【问题描述】:

我有一长串包含字段的条目

date=models.DateTimeField(default=timezone.now)

这个字段曾经只是一个 DateField,现在我把它改成了 datetime。 迁移后,现有条目的默认小时设置为 midgnig (00)。我想将所有条目更新为上午 9 点。

我想要这样的东西:

Entry.objects.all().update(date__hour=9)

但这不起作用,因为它引发和异常:

django.core.exceptions.FieldDoesNotExist:条目没有名为“date__hour”的字段

有什么建议吗? 谢谢

编辑 1:条目列表很大,超过 100 万个条目。因此,我想要一个数据库批量更新,而不是一个一个的解决方案。

【问题讨论】:

    标签: django orm django-queryset


    【解决方案1】:

    我现在没有要测试的项目。但是你能不能这样试试。

    for e in Entry.objects.all():
        e.date += timedelta(0, 9*3600)
        e.save()
    

    上述内容将起作用,因为每个对象的小时数为 00。但是,如果您想用 9 AM 静态替换日期对象,每个日期对象中都有不同的值。你可以像下面那样做。

    for e in Entry.objects.all():
        e.date = e.date.replace(hour=9)
        e.save()
    

    希望这能解决您的问题。

    【讨论】:

    • 谢谢。这可行,我知道这个解决方案,但我正在寻找数据库级别的更新(大规模更新)。条目的数量很大(超过 100 万),这将花费太多。我更新了我的问题更准确。
    • 我认为您没有任何其他直接使用 ORM 的解决方案。可能您必须使用原始 SQL 查询。顺便说一句,我相信这将需要与 ORM 的其他方法相同的时间(直到您不使用 SQL 查询)
    猜你喜欢
    • 1970-01-01
    • 2022-08-14
    • 2021-10-21
    • 2021-07-06
    • 1970-01-01
    • 2011-11-19
    • 2017-04-30
    • 2015-01-31
    • 1970-01-01
    相关资源
    最近更新 更多