在项目中,我必须处理大量订单(如购买时)数据。一起 对于订单数据,我必须以某种方式生成状态信息 被缓存。我不确定管理此类数据的好方法。
class Order:
buyer_name = TextField()
class OrderItem:
order = ForeignKey(Order)
quantity = IntegerField()
name = TextField()
最后但并非最不重要的是,每个订单都有一个直接依赖的条件 检查结果:
我的问题:什么是存储条件或信息等信息的好方法 检查结果?
我可能还需要查询每个订单的总数量 始终加入和汇总项目数量(性能)。
答案 0 :(得分:1)
据我了解您的问题,您的模型的属性一直在变化,可以使用数据库中存储的数据进行计算。简单的例子是类 Person 。 Person 类具有name,date_of_birth,place_of_birth等属性。超过该年龄也是 Person 的属性。但是我们不会将该属性保存在数据库中,因为它会根据其他因素(date_of_birth和now)动态变化。它看起来像这样:
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