Django 注释 ExpressionWrapper 没有 Return 预期类型
Django Annotate ExpressionWrapper Does not Return Expected Type
我有以下型号:
class Creditor(models.Model):
terms_of_payment = models.IntegerField(
blank=False,
null=False
)
class Invoice(models.Model):
creditor = models.ForeignKey(
Creditor,
blank=False,
null=False,
on_delete=models.CASCADE
)
reception_date = models.DateField(
blank=True,
null=True
)
我正在从以下查询集中为 due_on 获取类型 int
,而不是 datetime.date
并且无法弄清楚原因。
invoices = Invoice.objects.annotate(
due_on=ExpressionWrapper(
F('reception_date') + F('creditor__terms_of_payment'),
output_field=DateField()
)
)
我使用的数据库是MySQL。
所以基本上如果 reception_date=datetime.date(2021, 5, 13)
和 terms_of_payment=2
,我希望得到 datetime.date(2021, 5, 15)
但我得到 2021515
即 <class 'int'>
.
我终于找到了解决办法。问题是 terms_of_payment
是 IntegerField
而不是 DurationField
。为了使此查询集产生 datetime
,始终应将 DurationField 添加到 DateTimeField。这些对应于 datetime.datetime
和 datetime.timedela
in Python.
class Creditor(models.Model):
terms_of_payment = models.DurationField(
default=datetime.timedelta(days=30)
)
我有以下型号:
class Creditor(models.Model):
terms_of_payment = models.IntegerField(
blank=False,
null=False
)
class Invoice(models.Model):
creditor = models.ForeignKey(
Creditor,
blank=False,
null=False,
on_delete=models.CASCADE
)
reception_date = models.DateField(
blank=True,
null=True
)
我正在从以下查询集中为 due_on 获取类型 int
,而不是 datetime.date
并且无法弄清楚原因。
invoices = Invoice.objects.annotate(
due_on=ExpressionWrapper(
F('reception_date') + F('creditor__terms_of_payment'),
output_field=DateField()
)
)
我使用的数据库是MySQL。
所以基本上如果 reception_date=datetime.date(2021, 5, 13)
和 terms_of_payment=2
,我希望得到 datetime.date(2021, 5, 15)
但我得到 2021515
即 <class 'int'>
.
我终于找到了解决办法。问题是 terms_of_payment
是 IntegerField
而不是 DurationField
。为了使此查询集产生 datetime
,始终应将 DurationField 添加到 DateTimeField。这些对应于 datetime.datetime
和 datetime.timedela
in Python.
class Creditor(models.Model):
terms_of_payment = models.DurationField(
default=datetime.timedelta(days=30)
)