如果参数为空,我在 django 中遇到问题,试图排除或包含部分过滤器。
我的模型有 4 个参数: 开始日期、结束日期、严重性和来源。
过滤器可以有一个或多个这些参数。如果我通过其中 1 个,其他可能是
None
除非它们被定义。
我可以通过以下方式解决原始查询的问题
WHERE (param IS NULL OR param=param)
在 django 中也一样
"""SELECT * FROM mymanagelogs_logs WHERE (%(severity)s IS NULL OR severity=%(severity)s) AND (%(source)s IS NULL OR source=%(source)s) AND (%(start_date)s IS NULL OR timestamp >= %(start_date)s) AND (%(end_date)s IS NULL OR timestamp <= %(end_date)s)""",
params={'severity': severity, 'source': source, 'start_date':start, 'end_date':end}
)
但我不能做同样的查询集:
objects.filter(Q(date__range=(start, end)) & (Q(severity=severity) | Q(severity=None))
有什么想法吗?