我有一个 Django 模型 MyModel
class MyModel(models.Model):
"""My Model that stores date."""
date = models.DateField()
在我的 API 中,我收到一个参数,
review_month
我需要获取 MyModel 中的所有条目并替换它们的日期年份值。
我对于添加哪一年有以下条件: -> 如果 date__month 大于 review_month,则年份将为当年,否则年份将为上一年。
我需要这些新的日期字段,并为 MyModel 查询集的每个条目更新年份
MyModel.objects.annotate(
updated_year=Case(
When(
Q(review_date__month__gt=review_month.month), then=previous_year),
default=current_year,
output_field=IntegerField(),
),
)
)
这仅单独给出年份,但我想要一个包含日期字段的日期和月份的更新日期,以及其中的新更新年份,并且必须是日期字段,因为我需要对其应用排序。
我已经能够解决这个问题,所以如果将来有人遇到这个问题,我就是这样做的。
MyModel.objects.annotate(
review_day=Func(
F('review_date'), Value('DD'), function='to_char',
output_field=CharField()
),
review_month=Func(
F('review_date'), Value('MM'), function='to_char',
output_field=CharField()
),
updated_year=Case(
When(Q(review_date__month__gt=review_month.month),
then=previous_year,
),
default=current_year,
output_field=IntegerField(),
),
review_at=Concat(
F('updated_year'), Value('-'), F('review_month'),
Value('-'), F('review_day'), output_field=DateField()
)
)