Django M2M:获取包含所有数组元素的对象

时间:2016-08-10 08:14:35

标签: django python-2.7 django-models

我正在尝试使用多对多关系来解决获取对象的问题。问题如下:

我有一系列选定的过滤器,就是说, [red,rounded] 。然后我有一个产品模型包含很多过滤器的值,如:红色,蓝色,圆角,空白,大,小

我的目标是获得红色四舍五入

的产品

当我使用__in=[array]时,显然会导致那些红色的产品被四舍五入。

对我来说唯一可行的解​​决方案是使用:

products.objects.filter(fil=red).filter(fil=rounded).all()

但我想知道是否有任何方法不使用大量filter(),因为所需的金额是不可预测的(例如,用户可以选择[红色,蓝色,白色,圆形]。

1 个答案:

答案 0 :(得分:0)

您可以使用Q objects构建自定义查询。

# Build the query for selected terms
custom_query = None
for term in selected_terms:
    query_for_term = Q(fil=term)
    # Keep and'ing(&) terms
    custom_query = custom_query & query_for_term if custom_query else query_for_term

# Then filter using the query
products.objects.filter(custom_query)