0

我有以下型号:

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
    )

我从以下查询集中获取intdue_ondatetime.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'>

4

1 回答 1

0

我终于找到了解决方案。问题是terms_of_payment一个IntegerField而不是DurationField. 为了让这个查询集产生一个datetime,总是应该将一个 DurationField 添加到一个 DateTimeField。这些对应于datetime.datetimedatetime.timedela在 Python 中。

class Creditor(models.Model):

    terms_of_payment = models.DurationField(
        default=datetime.timedelta(days=30)
    )
于 2021-05-23T19:05:38.603 回答