operator.or_ 的高级 Django ORM 查询因 None 值而失败
Advanced Django ORM query with operator.or_ fails with None Values
我正在尝试查询数据库并排除一些包含某些特定字符串之一的行。
我的简化模型如下所示:
class Message(models.model)
text = models.TextField(blank=True, null=True)
我的查询如下所示:
import operator
ignored_patterns = ['<ignore>', ]
messages = Message.objects.exclude(
reduce(operator.or_, (Q(text__contains=pattern) for pattern
in ignored_patterns))
)
我遇到的问题是,以某种方式包含 self.text = None
的消息也被排除在外。
感谢每一个提示。
您可以在 exclude
中使用和条件:
exclude = reduce(operator.or_, (Q(text__contains=pattern) for pattern
in ignored_patterns))
nulltext = Q(text__isnull = False)
messages = Message.objects.exclude( nulltext & exclude )
此外,阅读有关 use of null in strings 的内容:
Avoid using null on string-based fields such as CharField and
TextField because empty string values will always be stored as empty
strings, not as NULL.
我正在尝试查询数据库并排除一些包含某些特定字符串之一的行。
我的简化模型如下所示:
class Message(models.model)
text = models.TextField(blank=True, null=True)
我的查询如下所示:
import operator
ignored_patterns = ['<ignore>', ]
messages = Message.objects.exclude(
reduce(operator.or_, (Q(text__contains=pattern) for pattern
in ignored_patterns))
)
我遇到的问题是,以某种方式包含 self.text = None
的消息也被排除在外。
感谢每一个提示。
您可以在 exclude
中使用和条件:
exclude = reduce(operator.or_, (Q(text__contains=pattern) for pattern
in ignored_patterns))
nulltext = Q(text__isnull = False)
messages = Message.objects.exclude( nulltext & exclude )
此外,阅读有关 use of null in strings 的内容:
Avoid using null on string-based fields such as CharField and TextField because empty string values will always be stored as empty strings, not as NULL.