如何在django中进行自定义过滤

时间:2015-10-20 10:54:12

标签: django django-filter

我创建了一个网页,用户可以在其中填写四个选项并将其发送到服务器。之后,我在数据库中有一个过滤器,用于向网页提供结果。

所有过滤器都是可选的。

示例:我有三个参数:arg1 ,arg2, arg3由用户提供。

现在写的问题是

x = SMS.objects.filter(Q(KPImessageId = arg1) | Q(subscriberId = arg2 ) |
                       Q(state = arg3))

问题是,当我提供所有3个参数然后它工作正常,但是当我只提供2个参数时,它就无法排序并给出错误。

如果存在arg1,我必须按这些参数排序,然后按arg1排序。如果存在arg1arg2,则按两个参数排序。

1 个答案:

答案 0 :(得分:0)

您可以在视图中动态构建Q对象。

q=Q()
if arg1:
    q = q | Q(field1=arg1)
if arg2:
    q = q | Q(field2=arg2)
...
queryset = MyModel.objects.filter(q)