【问题标题】:Django ManyToMany filter with more than one condition具有多个条件的 Django ManyToMany 过滤器
【发布时间】:2011-10-25 00:21:36
【问题描述】:

我的简化模型如下:

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”的参数以及名称为“width”且值为“200”的参数。

提前谢谢你!

【问题讨论】:

    标签: django manytomanyfield


    【解决方案1】:

    这可能有效:

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

    【讨论】:

    • 有效!我将参数上的过滤器定义为 Q(params__name='height') & Q(params__value="100") Q(params__name='width') & Q(params__value="200") 但它不起作用。将 Q 对象分成两个过滤器可以正常工作。谢谢!
    猜你喜欢
    • 2014-02-03
    • 2013-01-18
    • 2021-06-07
    • 2017-01-15
    • 2020-04-17
    • 1970-01-01
    • 2015-11-29
    • 2019-10-10
    • 1970-01-01
    相关资源
    最近更新 更多