Django select 相关

Django select related

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

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' object is not iterable.

我猜相关查询是错误的。

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

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

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

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

categories = Category.objects.prefetch_related('merchants')