我正在使用django-favorites来拉取用户存储的对象列表。该应用程序有一个模型,经理使用Django查询命中太多次的MySQL数据库
class FavoriteManager(models.Manager):
""" A Manager for Favorites
"""
def favorites_for_user(self, user):
""" Returns Favorites for a specific user
"""
return self.get_query_set().filter(user=user)
class Favorite(models.Model):
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
created_on = models.DateTimeField(auto_now_add=True)
objects = FavoriteManager()
class Meta:
verbose_name = _('favorite')
verbose_name_plural = _('favorites')
unique_together = (('user', 'content_type', 'object_id'),)
def __unicode__(self):
return "%s added %s as a favorite" % (self.user, self.content_object)
在我看来,我拉喜爱的用户
from favorites.models import Favorite
def myfavorites(request):
item = Favorite.objects.favorites_for_user(user=request.user)
return render_to_response('myfavorites.html', {
'favorites':item
},
context_instance=RequestContext(request))
在我的模板,我试图让最爱的列表和它们的模型类型:
{% for fave in favorites %}
{{ fave.content_type }}<br>
{{ fave.content_object }}<br><br>
{% endfor %}
但使用django调试工具栏,我看到我为每个循环打了两次数据库。该代码正在查询数据库中的content_type和content_object,用于收藏夹对象中的每个fave。
如何优化代码以便数据被拉一次而不需要多次命中数据库来检索信息?
不适用于泛型关系。 – jpic 2011-12-29 13:02:43
你确实是对的。请参阅编辑。 – 2011-12-29 13:19:07