我想在django中使用带或条件的过滤器。 为此,我想使用Q对象。 我的代码是这样的
def product(request):
try:
proTitle = request.GET.get('title')
ProDescription = request.GET.get('description')
except:
pass
list0 = []
result = Product.objects.filter(Q(title__contains=proTitle ) | Q(description__contains=ProDescription ) )
for res in result:
list0.append(res.project_id)
data ={'title result':list0}
return HttpResponse(json.dumps(data))
return HttpResponse(json.dumps(data), content_type='application/json')
当传递所有值时,proTitle,ProDescription
it working fine.
If any value is going to none it encounter a error
不能将None用作查询值`
为什么在查询集中使用OR运算符时发生此错误
我也试试这个
result = Project.objects.filter(title__contains=proTitle) | Project.objects.filter(description__contains=ProDescription )
但同样的错误发生了 我不明白到底是什么问题
您可以在一个循环中构建
Q
对象,丢弃所有不存在的值。请注意,经过考虑,您的except
似乎永远无法到达,因为如果Get参数不存在,get
将只返回None
。因此,您可以将try
替换为if
。在下面的代码假设您只想在过滤器中忽略未设置的值。在
(这是未经测试的,如果您有任何问题,请告诉我。)
您可以将
get
方法的默认值设置为None
以外的值,例如空字符串:然而,当使用
__contains
时,这很可能返回数据库中的所有结果。在否则,您可以构建丢弃所有
None
值的Q函数。在以此作为指导:How to dynamically compose an OR query filter in Django?
您的错误似乎意味着其中一个值是
None
:相关问题 更多 >
编程相关推荐