【发布时间】:2021-02-04 15:03:39
【问题描述】:
我正在尝试查询所有过期的预订,但我没有end_date 之类的任何字段,我有start_date 和总计itinerary__days。
这是我的查询:
import datetime
from django.db.models import Avg, Count, Min, Sum, FloatField, ExpressionWrapper, F, DateTimeField
trip = Booking.objects.annotate(
end_date=ExpressionWrapper(
F('start_date') + datetime.timedelta(days=F('itinerary__days')),
output_field=DateTimeField()
)
)
这些是我的模型:
class Itinerary(models.Model):
days = models.PositiveSmallIntegerField(_("Days"), null=True, blank=True)
class Booking(models.Model):
itinerary = models.ForeignKey(
Itinerary,
on_delete=models.CASCADE
)
start_date = models.DateField(_("Start Date"), null=True, blank=True)
def get_end_date(self):
return self.start_date + datetime.timedelta(days=self.itinerary.days)
你可能已经注意到我有一个方法可以得到end_date:get_end_date()
这就是为什么我尝试注释以获取结束日期并根据结束日期查询以获取过期预订。
在我的查询中,您可能会注意到这一行:DateTime.timedelta(days=F('itineraray__days'))
所以你知道timedeltadays 将参数类型作为整数但传递了这个导致错误的itinerary__days。
在这种情况下有人可以帮助我吗?
【问题讨论】:
标签: django django-rest-framework django-orm