我创建了一个网页,用户可以在其中填写四个选项并将其发送到服务器。之后,我在数据库中有一个过滤器,用于向网页提供结果。
所有过滤器都是可选的。
示例:我有三个参数:arg1 ,arg2, arg3
由用户提供。
现在写的问题是
x = SMS.objects.filter(Q(KPImessageId = arg1) | Q(subscriberId = arg2 ) |
Q(state = arg3))
问题是,当我提供所有3个参数然后它工作正常,但是当我只提供2个参数时,它就无法排序并给出错误。
如果存在arg1
,我必须按这些参数排序,然后按arg1
排序。如果存在arg1
和arg2
,则按两个参数排序。
答案 0 :(得分:0)
您可以在视图中动态构建Q对象。
q=Q()
if arg1:
q = q | Q(field1=arg1)
if arg2:
q = q | Q(field2=arg2)
...
queryset = MyModel.objects.filter(q)