Django ORM - 如果参数为空,WHERE 的 SQL 部分

问题描述 投票:0回答:0

如果参数为空,我在 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))

有什么想法吗?

django postgresql django-queryset
© www.soinside.com 2019 - 2024. All rights reserved.