Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django的多对多不清楚_Python_Database_Django - Fatal编程技术网

Python django的多对多不清楚

Python django的多对多不清楚,python,database,django,Python,Database,Django,型号: class Store(models.Model): name = models.CharField(max_length=100) greatStore = models.BooleanField() class Book(models.Model): stores = models.ManyToManyField(Store) name = models.CharField(max_length=200,unique=True) fantasticBo

型号:

class Store(models.Model):
   name = models.CharField(max_length=100)
   greatStore = models.BooleanField()

class Book(models.Model):
   stores = models.ManyToManyField(Store)
   name = models.CharField(max_length=200,unique=True)
   fantasticBook = models.BooleanField()   
我想弄一份大书店里所有书的目录。阅读文档时,它说:我应该写:

myBooks =Book.objects.filter(stores__greatStore=True)
但是这仅仅是一个与商店的连接。greatStore==TRUE这不是我想要的

例如,如果我有两个商店(都是很棒的商店),数据库中有一本书属于这两个商店,那么myBooks将有两个元素:两倍于同一本书

我想要的是至少有一个大商店的藏书,而不是验证(s属于b.stores和s.greatStores==true)的夫妇(b,s)的第一个元素

编辑:

为什么我认为Django的API具有误导性: 让我们举一个相同的例子:两个很棒的商店和一本属于这两个商店的书(fantasticBook==true)。 如果运行请求,请执行以下操作:

myBooks = Book.objects.all()
myBooks = Book.objects.filter(coolBook=True)
你只会得到一个结果:唯一存在的书。 如果运行请求,请执行以下操作:

myBooks = Book.objects.all()
myBooks = Book.objects.filter(coolBook=True)
你只会得到一个结果:唯一存在的书。 如果运行请求,请执行以下操作:

myBooks = Book.objects.filter(stores__greatStore=True)
这似乎意味着你得到的藏书至少有一个很棒的商店,但这不是我们得到的,因为myBooks有两个结果。

你可以使用
distinct()

myBooks =Book.objects.filter(stores__greatStore=True).distinct()

那么你希望这些书在结果集中是唯一的吗?我希望这些书的集合至少有一个伟大的商店,所以是唯一的。好吧,似乎就是这样,只是文档不清楚,至少对我来说是这样。