我尝试使用Offers
选择City
中可用的所有id=1
,但我得到X倍的结果倍数,其中X是Shops
的数量city_id=1
1}}:
models.py:
class Cities(models.Model):
name = models.CharField(max_length=128)
slug = models.SlugField(unique=True)
class Shop(models.Model):
name = models.CharField(max_length=128)
city = models.ManyToManyField(to=Cities)
class Product(models.Model):
title = models.CharField(max_length=128)
class Offer(models.Model):
product = models.ForeignKey(to=Product)
shop = models.ManyToManyField(to=Shop)
views.py:
print Offer.objects.all().filter(shop__city=1)
我想:
[<Offer: Test1>]
但我明白了:
[<Offer: Test1>, <Offer: Test1>, <Offer: Test1>]
我的数据库中有1条Offer
条记录和3条Shop
条记录(同城)。
你能告诉我对ManyToMany关系/请求的理解吗?
答案 0 :(得分:1)
默认情况下,QuerySet不会消除重复的行。实际上,这很少是一个问题,因为像Blog.objects.all()这样的简单查询不会引入重复结果行的可能性。但是,如果您的查询跨越多个表,则在评估QuerySet时可能会获得重复的结果。那就是你使用distinct()。
您需要应用distinct()
方法,因此您可能需要执行以下操作:
print Offer.objects.all().filter(shop__city=1).distinct()