嗨,我是Django的新手。
以下是我的模型(简化):
class Store(models.Model):
company = models.CharField(max_length=256)
brands = models.ManyToManyField('Brand',related_name='brand')
class Brand(models.Model):
company = models.CharField(max_length=256)
以下是我对模板的看法:
def brand_detail_slug(request, slug):
brand = Brand.objects.get(slug=slug)
return render(request, 'storefinder/brand_detail.html', {'brand': brand})
我可以在我看来成功检索品牌信息:
{% for p in brand.product_types.all %}
<li>{{ p }}</li>
{% endfor %}
但我不知道如何为商店做这件事,因为它并没有在品牌中真正定义。这是一个单独的模型....这是我感到困惑的地方。
谢谢!
答案 0 :(得分:3)
多对多关系是相互的。所以商店可以从品牌看到,反之亦然。
您可以使用prefetch_related
来最小化执行此操作所需的数据库查询数量:
brands = Brand.objects.filter(slug=slug).prefetch_related('stores')
stores = [b.stores.all() for b in brands] # all related stores to those brands
<强>更新强>
related_name
未正确定义。使用包含M2M关系的模型的名称:
brands = models.ManyToManyField('Brand', related_name='stores')
答案 1 :(得分:-1)
我想我已经在网上找到了一个解决方案,不确定它是否完美,但它对我有用:
class Store(models.Model):
brands = models.ManyToManyField('Brand', blank=True)
class Brand(models.Model):
stores = models.ManyToManyField('Store', through=Store.brands.through, blank=True)