【发布时间】:2012-03-06 15:58:12
【问题描述】:
在 models.py 我有模型订单和项目,项目包含价格和重量:
class Item(models.Model):
name = models.CharField(u'Name', max_length=255)
article = models.CharField(u'Article', max_length=255)
price = models.PositiveIntegerField(u'Price')
weight = models.PositiveIntegerField(u'weight', blank=True, null=True, default=None)
class Order(models.Model):
item = models.ForeignKey(Item, verbose_name=u'Item')
count = models.PositiveIntegerField(u'Count')
user = models.ForeignKey(User, verbose_name=u'User')
def sum(self):
return self.count*self.item.price
def weight(self):
return self.count*self.item.weight
在views.py中我选择我的订单:
@render_to('app/purchase_view.html')
def purchase_view(request):
myorders = Order.objects.select_related().filter(user=request.user).all()
context.update({
'myorders':myorders,
})
在模板中:
{% for myorder in myorders %}
<td>{{ myorder.item.article }}</td>
<td style="text-align:left;"><a href="#">{{ myorder.item.name }}</a></td>
<td>{{ myorder.item.price }}</td>
<td>{{ myorder.count }}</td>
<td>{{ myorder.sum }}</td>
<td>{{ myorder.weight }}</td>
</td>
</tr>
{% endfor %}
所以,django 会为每个参数生成:myorder.sum、myorder.weight - 类似的查询。订单模型总和和权重中是否有缓存。
【问题讨论】:
-
有很多简单的方法可以进行这种缓存,但没有理由这样做。您要缓存的只是整数乘法的结果;您不会保存数据库往返,因为您已经在模板中访问了
order.item,而且您仍然在使用 select_related。
标签: python django django-models