0

我想显示所有类别的相关商家和相关商家的形象。我怎样才能做到这一点?

模型.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)

视图.py

categories = Category.objects.select_related()

索引.html

{% for category in categories %}
    {{ category.title }}
    {% for merchant in category.merchants  %}
        {{ merchant.name }}
        {{ merchant.image.url }}
    {% endfor %}
{% endfor %}

我的代码不起作用。

'RelatedManager' 对象不可迭代。

我猜相关查询是错误的。

4

1 回答 1

1

相关查询错误的,但这不是您的错误的原因。那是因为您需要使用带有all()or的相关管理器filter(),就像任何其他管理器一样。

{% for merchant in category.merchants.all %}

请注意,无论您是否在视图中执行任何特殊的相关查询,这都有效;此语法始终可用,并且select_related不再允许访问任何属性。它所做的只是使查询更有效率。

但是,在您的情况下select_related,甚至不是正确的使用方法;它不会有任何效果。那是因为它只适用于正向关系,而您有从 Category 到 Merchant 的反向关系。你需要prefetch_related那个。

categories = Category.objects.prefetch_related('merchants')
于 2016-05-20T12:05:10.253 回答