[英]Django: How do I count the number of objects related to another in the database?
[英]How do I manage stateful data for database objects in Django/Python?
在一个项目中,我必须处理很多订单(如购买)数据。 我必须与订单数据一起生成必须以某种方式缓存的状态信息。 我不确定管理此类数据的好方法。
class Order:
buyer_name = TextField()
class OrderItem:
order = ForeignKey(Order)
quantity = IntegerField()
name = TextField()
最后但并非最不重要的一点是,每个订单的条件都直接取决于检查结果:
我的问题:存储条件或检查结果等信息的好方法是什么?
我可能还必须查询每个订单的总数量计数,而不能一直保持联接和汇总项目数量(性能)。
据我了解您的问题,模型的属性一直在变化,可以使用数据库中存储的数据进行计算。 一个简单的例子是一个Person类。 Person类具有诸如name,date_of_birth,place_of_birth等属性,此外,age也是Person的属性。 但是我们不会将该属性保存在数据库中,因为它会根据其他因素(date_of_birth和现在)而动态变化。 它可能看起来像这样:
class Person(models.Model):
name = models.CharField(max_length=100, unique=True)
date_of_birth = models.DateField()
place_of_birth = models.CharField(max_length=60)
def __str__(self):
return self.name
@cached_property
def age(self):
# get today's date (for example using timezone.now())
# and calculate the age today - date_of_birth
# return the age in years as integer
return age
现在,您可以在任何地方使用该属性,该属性将被缓存并且不再进行数据库查询。
并且比在模板中您可以执行以下操作:
{% extend "base.html" %}
<p>{{ person.name }} is {{ person.age }} years old.</p>
我希望这能给您一个想法,并且您可以针对您的具体情况进行解决。 您还可以使用装饰@property
,但是Django的@cached_property
为您提供了更多的可能性,比如缓存。 您可以这样导入:
from django.utils.functional import cached_property
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.