Django ManyToMany具有多个条件的过滤器 [英] Django ManyToMany filter with more than one condition
本文介绍了Django ManyToMany具有多个条件的过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的简化模型如下:
class Function(models.Model):
name = models.CharField(max_length=20)
params = models.ManyToManyField("Param")
class Param(models.Model):
name = models.CharField(max_length=20)
value = models.CharField(max_length=20)
所以,每个函数对象都有参数集,例如:
So, every function object has the set of parameters, for example:
f = Function(name="my_function")
f.save()
param1 = Param(name="height", value="100")
param1.save()
param2 = Param(name="width", value="200")
param2.save()
f.params.add(param1)
f.params.add(param2)
问题是我无法用函数名,参数名和参数值的过滤器来选择一个函数。
The problem is that I cannot figure how to select a function using a filter on function name, parameter name and parameter value.
对于上述功能,选择应该是:
For above function, the select should be:
获取名称为my_function的函数,其中包含参数na我的高度和值100AND参数名称宽度和值200。
Get function with name "my_function" which contains parameter with name "height" and value "100" AND parameter with name "width" and value "200".
提前谢谢!
推荐答案
可能会工作:
from django.db.models import Q
functions = (Function.objects
.filter(name='my_function')
.filter(Q(params__name='height') & Q(params__value="100")
.filter(Q(params__name="width") & Q(params__value="200"))
这篇关于Django ManyToMany具有多个条件的过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文