我想显示与相关商家和相关商家图像的所有类别。我怎样才能做到这一点?
models.py
class Category(models.Model):
title = models.CharField(max_length = 50)
class Meta:
verbose_name_plural = 'Categories'
class Merchant(models.Model):
category = models.ForeignKey('Category', related_name = 'merchants', blank = True, null = True)
title = models.CharField(max_length = 100)
class StoredFile(models.Model):
merchant = models.OneToOneField(Merchant, related_name="_image", blank = True, null = True)
views.py
categories = Category.objects.select_related()
的index.html
{% for category in categories %}
{{ category.title }}
{% for merchant in category.merchants %}
{{ merchant.name }}
{{ merchant.image.url }}
{% endfor %}
{% endfor %}
我的代码无效。
' RelatedManager'对象不可迭代。
我猜相关查询是错误的。
答案 0 :(得分:1)
相关查询 错误,但这不是导致错误的原因。这是因为您需要使用all()
或filter()
的相关经理,就像其他任何经理一样。
{% for merchant in category.merchants.all %}
请注意,无论您是否在视图中执行任何特殊相关查询,此方法都有效;此语法始终可用,而select_related
不可以访问更多属性。它所做的就是提高查询效率。
但是在你的情况下,select_related
甚至不是正确的用法;它没有任何效果。这是因为它只适用于前向关系,而且你有从类别到商家的反向关系。你需要prefetch_related
。
categories = Category.objects.prefetch_related('merchants')