Django ManyToMany过滤具有多个条件

时间:2011-10-25 00:21:37

标签: django manytomanyfield

我的简化模型如下:

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)

因此,每个函数对象都有一组参数,例如:

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)

问题是我无法想象如何使用函数名,参数名和参数值的过滤器来选择函数。

对于上述功能,选择应为:

获取名称为“my_function”的函数,其中包含名称为“height”且值为“100”的参数AND参数名称为“width”且值为“200”。

提前谢谢!

1 个答案:

答案 0 :(得分:2)

这可能有效:

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"))