我一般都是django和ORM的新手,因此无法提出可以连接多个表的查询。
我有4个需要加入的模型 - Category
,SubCategory
,Product
和Packaging
,示例值为:
Category: 'male'
SubCategory: 'shoes'
Product: 'nikeXYZ'
Packaging: 'size_36: 1'
每个模型对上面的模型都有FK(即。SubCategory
有字段category
等)。
我的问题是 - 我如何过滤Product
给定Category
(例如男性)并仅显示Packaging
属性available
设置为True
的产品}?显然,我希望最小化我的数据库上的命中(理想情况下使用1个SQL查询)。
我可以沿着这些方向做点什么:
available = Product.objects.filter(packaging__available=True)
subcategories = SubCategory.objects.filter(category_id=<id_of_male>)
products = available.filter(subcategory_id__in=subcategories)
但是我认为至少需要2次点击数据库(available
,subcategories
)。有没有办法一次性完成?
答案 0 :(得分:1)
试试这个:
lookup = {'packaging_available': True, 'subcategory__category_id__in': ['ids of males']}
product_objs = Product.objects.filter(**lookup)
答案 1 :(得分:0)
尝试阅读: this 您可以使用_set,multi __(通过FK链接模型)或创建列表ID
进行查询答案 2 :(得分:0)
我认为这应该有效,但未经过测试:
Product.objects.filter(packaging__available=True,subcategories__category_id__in=[id_of_male])
related_name
,那么subcategory__set
而不是subcategories
应该工作可能subcategories__category_id__in=[id_of_male]
可以切换为.._id=id_of_male
。