是否可以从另一张表中插入空白的datetimefield?

问题描述 投票:1回答:1
class Customer(models.Model):

    last_purchase = models.DateTimeField(blank=True, null=True)

我有一个空白的DateTimeField,它将用相应表中最后修改的DateTimeField不断更新自身。

class Order(models.Model):
    customer = models.ForeignKey(Customer, null=True, on_delete= models.SET_NULL)
    date_created = models.DateTimeField(auto_now_add=True, null=True)


这将如何看待视图?

python django model
1个回答
0
投票
请执行

不重复数据。存储相同的数据或数据的聚合通常是一种反模式。事实证明,保持数据同步比人们期望的要难。这意味着,如果创建,更新,删除或更改了Order,则必须更新相关的Customer。很容易忽略一些情况,以达到不一致的目的。

通常更好的是利用Customer注释您的查询集。因此,如果您从客户中删除.annotate(..)字段,并且.annotate(..)对客户有last_purchase

Order

然后我们可以制作一个ForeignKey,看起来像:

class Customer(models.Model): # … class Order(models.Model): date_created = models.DateTimeField(auto_now_add=True) customer = models.ForeignKey(Customer, null=True, on_delete=models.SET_NULL)

如果QuerySet尚未下达命令,则为from django.db.models import Max

Customer.objects.annotate(
    last_purchase=Max('order__date_created')
)None)。

如果经常需要,可以在NULL中定义逻辑:

Customer

现在,当您使用Manager时,它将自动为对象添加注释。
© www.soinside.com 2019 - 2024. All rights reserved.