:views.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
を私は私の注文を選択します。
@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を使用しているので、DB往復を保存することはありません。 – AdamKG