我有以下过滤器查询正在执行SQL OR语句:
results = Stores.objects.filter(Q(title__icontains=prefs.address1) | Q(title__icontains=prefs.address2))
这很好但是如果prefs.address1和prefs.address2值(来自另一个模型)在mySQL中是空白的,Django会抱怨以下错误:
不能使用None作为查询值
在构建OR过滤器查询之前,是否有一种优雅的方法可以检查我的过滤器值是否为空?
非常感谢。
答案 0 :(得分:11)
您可以执行此操作,这对于更多查询很容易理解
query = Q()
for search in (prefs.address1, prefs.address2):
if search:
query |= Q(title__icontains=search)
results = Stores.objects.filter(query)
答案 1 :(得分:3)
此?
thefilter = Q(title__icontains=prefs.address1)
if prefs.address2 is not None:
thefilter = thefilter | Q(title__icontains=prefs.address2)
results = Stores.objects.filter( thefilter)