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)
这将如何看待视图?
不重复数据。存储相同的数据或数据的聚合通常是一种反模式。事实证明,保持数据同步比人们期望的要难。这意味着,如果创建,更新,删除或更改了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
时,它将自动为对象添加注释。