在models.py我有機型訂單和項目,包括項目的價格和重量:Django模型緩存
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模型總和和重量中是否有緩存?
有很多簡單的方法來做這種緩存,但沒有理由。所有你要緩存的是整數乘法的結果;因爲您已經訪問模板中的'order.item',所以您不會保存DB往返,並且您仍然使用select_related。 – AdamKG 2012-03-06 16:05:56