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()
我想獲得的所有這些都是很大存儲書籍列表。閱讀文檔,它說:https://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships我應該寫:
myBooks =Book.objects.filter(stores__greatStore=True)
但是這僅僅是做了一個Store.greatStore JOIN == TRUE這不是我想要的!
例如,如果我有兩個商店(都是很好的商店)和一本屬於我店數據庫的書,myBooks將有兩個元素:同一本書的兩倍。
我想要的書,其至少有一個很大的店,不是夫妻(B,S)驗證第一元素(屬於b.stores和s.greatStores ==真)
集合編輯:
爲什麼我認爲Django的API是誤導性的: 讓我們保持同樣的例子:2商店和book(夢幻般的書==真)屬於這兩個商店。 如果運行要求:
myBooks = Book.objects.all()
你得到結果只有一個:存在的唯一的書。 如果運行要求:
myBooks = Book.objects.filter(coolBook=True)
你得到結果只有一個:存在的唯一的書。 如果運行要求:
myBooks = Book.objects.filter(stores__greatStore=True)
這似乎意味着你得到的書籍,至少有一個偉大的店集合,但是這不是我們所得到的,因爲myBooks有2個結果。
所以,你要的書是在結果集特有的? – XORcist
我想收藏的書至少有一個偉大的商店,所以是獨一無二的。 – JohnCastle