【问题标题】:Django annotate by adding months to date fieldDjango通过添加月份到日期字段进行注释
【发布时间】:2021-06-14 15:58:20
【问题描述】:
from datetime import timedelta
from django.db.models import DateTimeField, ExpressionWrapper, F


MyModel.objects.annotate(
    date_plus345=ExpressionWrapper(F('creation_date') + timedelta(days=345),
        output_field=DateTimeField()
    )
)

像这样有什么方法可以在creation_date字段中添加40个月并对其进行注释吗?

【问题讨论】:

  • 为什么不让它成为你的 MyModel 班级的成员?
  • @WillemVanOnsem 因为我需要根据该字段对结果进行排序?因此,如果我将其作为模型 MyModel 的属性进行排序,我必须将所有数据集从数据库带到服务器,对吗?
  • 但是如果每次都是40个月,这就意味着完全等同于过滤creation_date
  • @WillemVanOnsem 月份可以根据某些条件进行更改。这将是一个动态计算的值

标签: django django-annotate


【解决方案1】:

相对增量对您有帮助吗?

from dateutil.relativedelta import relativedelta
    MyModel.objects.annotate(
        date_plus345=ExpressionWrapper(F('creation_date') + relativedelata(months+=40),
            output_field=DateTimeField()
        )
    )

【讨论】:

  • 不起作用。提高ProgrammingError: can't adapt type 'relativedelta'
猜你喜欢
  • 2021-03-15
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
  • 2011-08-20
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多