我试图查询数据库并排除某些包含某些特定行为的行。
我的简化模型如下所示:
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
的消息。
我感谢每一个提示。
答案 0 :(得分:1)
您可以在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 )
避免在基于字符串的字段(如CharField和)上使用null TextField,因为空字符串值将始终存储为空 字符串,而不是NULL。