简体   繁体   English

如何在Django查询中处理“无”DB值

[英]How to deal with “None” DB values in Django queries

I have the following filter query which is doing an SQL OR statement: 我有以下过滤器查询正在执行SQL OR语句:

results = Stores.objects.filter(Q(title__icontains=prefs.address1) | Q(title__icontains=prefs.address2))

This works fine but if the prefs.address1 and prefs.address2 values (which come from another model) are blank in mySQL, Django complains with the following error: 这工作正常,但如果prefs.address1和prefs.address2值(来自另一个模型)在mySQL中是空白的,Django会抱怨以下错误:

Cannot use None as a query value 不能使用None作为查询值

Is there an elegant way to check to see if my filter values are not blank before constructing the OR filter query? 在构造OR过滤器查询之前,是否有一种优雅的方法来检查我的过滤器值是否为空?

Many thanks. 非常感谢。

You could do this which is easily generalisable to more queries 您可以执行此操作,这对于更多查询很容易理解

query = Q()
for search in (prefs.address1, prefs.address2):
    if search:
        query |= Q(title__icontains=search)
results = Stores.objects.filter(query)

This? 这个?

thefilter = Q(title__icontains=prefs.address1)
if prefs.address2 is not None:
    thefilter = thefilter | Q(title__icontains=prefs.address2)
results = Stores.objects.filter( thefilter)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM