Reputation: 522
In models.py I have models Order and Item, Item containing price and weight:
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
In views.py I select my orders:
@render_to('app/purchase_view.html')
def purchase_view(request):
myorders = Order.objects.select_related().filter(user=request.user).all()
context.update({
'myorders':myorders,
})
And in template:
{% 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 %}
so, django generates for each parameter: myorder.sum, myorder.weight - similar queries. Is there something for cache in Order model sum and weight.
Upvotes: 0
Views: 1009
Reputation: 599470
What makes you think Django is doing queries to get order.price and order.weight? It isn't. It's doing a single query, to get the order and its associated item (because you used select_related). Everything after that is simply operations on data it already has.
Upvotes: 0
Reputation: 174614
I am not sure what you are actually asking, but quersets in django are lazy. This means that django doesn't actually execute the query until the queryset is evaluated.
This might be what you are seeing when you say its cached.
Upvotes: 1