0
我的模式是這樣的查詢對象:Django的 - 通過許多一對多關係
class Category(models.Model):
name = models.CharField(_('name'), max_length=50)
class Product(models.Model):
name = models.CharField(_('product name'), max_length=40)
category = models.ManyToManyField(Category)
我想建立一個過濾器查詢在那裏我可以選擇1個或多個類別,並返回連接到產品所有選定的類別。
例
Product_1 - 屬於category_1,category_2
Product_2 - 屬於category_1,category_2和category_3
當category_1過濾和category_2兩種產品應該由查詢返回。在所有3個類別上進行過濾時,應僅返回Product_2,因爲這是與所有選定類別相關的唯一產品。
過濾將是動態的,因此過濾的類別數量可能是無限的。
我該怎麼做?我曾嘗試過
Product.objects.filter(category__in=[1,2,3])
但是,由於它們與任何類別匹配,所以它們都給了我product_1和product_2。
我曾嘗試創建問答過濾
Product.objects.filter(Q(category__id=1), Q(category__id=2))
但這並不返回任何產品。
這樣的查詢將如何構造工作?
感謝您的答覆。如何動態鏈接過濾器? – Mikael
好吧,你可以動態地添加它們在一個循環中,如:qs = qs.filter(foo = bar) – schneck
您可以使用'reduce':'queryset = reduce(lambda q,c:q.filter(category = c),[1,2,3] ,Product.objects.all())' –