我正在使用django 1.10
我创建了这个适用于我的查询:
filters_qs = filters_qs.filter(
Q(
user__in=[cache.user for cache in caches],
status_id__in=[Status.Open['id'], Status.Empty['id']],
revision=0
) |
Q(
user=None,
status_id__in=[Status.Open['id'], Status.Empty['id']],
revision=0
)
)
我使用'OR'因为我正在查找查询集为None或列表中的结果。但是 - 看起来不那么'pythonic'......它重复相同的代码以进行微小的改变。还有另外一种方法吗?例如,像 - (不起作用)
Q(
user__in=[cache.user for cache in caches] + [None],
status_id__in=[
Status.Open['id'],
Status.Empty['id']
],
revision=0
)
感谢。
答案 0 :(得分:5)
您应该使用isnull
查找来检查None
值。试试这个:
filters_qs.filter(
Q(user__in=map(lambda item: item.user, caches)) |
Q(user__isnull=True),
status_id__in=[
Status.Open['id'],
Status.Empty['id']
],
revision=0
)