我想在 django 中使用带有 OR 条件的过滤器。 为此我想使用 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
它工作正常。
如果任何值变为 None ,则会遇到错误
Cannot use None as a query value`
为什么当我在查询集中使用 OR 运算符时会发生此错误
我也试试这个
结果 = Project.objects.filter(title__contains=proTitle) | Project.objects.filter(description__contains=ProDescription)
但是发生了同样的错误 我无法理解到底是什么问题
最佳答案
您可以将 get
方法的默认值设置为 None
以外的其他值,例如空字符串:
proTitle = request.GET.get('title', '')
ProDescription = request.GET.get('description', '')
funAria = request.GET.get('funAria', '')
femaleReq = request.GET.get('femaleReq', '')
然而,当使用__contains
时,这可能会返回数据库中的所有结果。
否则,您可能会构建丢弃所有 None
值的 Q 函数。
以此为指导:How to dynamically compose an OR query filter in Django?
关于python - 在 django 查询集中使用 Q 对象进行 OR 条件时发生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39901266/