具有动态字段-值对列表的Django模型过滤器

具有动态字段-值对列表的Django模型过滤器,django,django-models,django-forms,Django,Django Models,Django Forms,如果有一种方法可以传递值列表,这些值的大小取决于用户发送的值。这是用户查询的基本要求 例如,假设一个模型有3个字段,如下所示 class MyModel(models.Model) Fiedl1 //say an int field Field2 //int field Field3 //char field 在用户搜索表单中,所有字段都是可选的,用户可以查询特定对象的三种组合 用户未在表单中设置任何字段(默认url可能为句柄) 用户仅为两个字段设置值 用户设置查询的所有值。

如果有一种方法可以传递值列表,这些值的大小取决于用户发送的值。这是用户查询的基本要求

例如,假设一个模型有3个字段,如下所示

class MyModel(models.Model)
   Fiedl1 //say an int field
   Field2 //int field
   Field3 //char field
在用户搜索表单中,所有字段都是可选的,用户可以查询特定对象的三种组合

  • 用户未在表单中设置任何字段(默认url可能为句柄)
  • 用户仅为两个字段设置值
  • 用户设置查询的所有值。(与第2条相似)
  • 我的理解是,POST请求中只传递可用字段就可以了。我该怎么做?我正在寻找正确的、更少编码的解决方案。

    您可以使用Q对象

    它看起来是这样的:

    q_objects = Q() 
    for field, value in data:
        q_objects |= Q(**{field: value})
    
    queryset = MyModel.objects.filter(q_objects)
    
    可以使用Q对象

    它看起来是这样的:

    q_objects = Q() 
    for field, value in data:
        q_objects |= Q(**{field: value})
    
    queryset = MyModel.objects.filter(q_objects)