如何处理Django查询中的“None”数据库值

8 投票
2 回答
6066 浏览
提问于 2025-04-15 16:29

我有一个过滤查询,它在做一个SQL的“或”操作:

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

这个查询运行得很好,但如果prefs.address1和prefs.address2的值(这些值来自另一个模型)在MySQL中是空的,Django就会报错,错误信息是:

不能把None当作查询值

有没有什么好的方法可以在构建“或”过滤查询之前,检查一下我的过滤值是否为空呢?

非常感谢。

2 个回答

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)
12

你可以这样做,这种方法很容易扩展到更多的查询。

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

撰写回答