【发布时间】:2015-01-21 07:42:06
【问题描述】:
我有一个特定的QuerySet,名为qs。对于所有 qs 记录,查询哪些模型字段在数据库中只有 null 值的有效方法是什么?
或者-您将如何获取至少具有一个不是null 的值的所有字段,并且只有它们?
【问题讨论】:
标签: django null django-queryset django-orm
我有一个特定的QuerySet,名为qs。对于所有 qs 记录,查询哪些模型字段在数据库中只有 null 值的有效方法是什么?
或者-您将如何获取至少具有一个不是null 的值的所有字段,并且只有它们?
【问题讨论】:
标签: django null django-queryset django-orm
如果我的理解正确,第一种情况是 - 仅获取每个字段为 Null 的对象:
qs.filter(**{'{0}__isnull'.format(field.name): True for field in self.model._meta.fields})
第二种情况 - 仅获取至少一个字段不是 Null 的对象:
from django.db.models import Q
qs.filter(reduce(lambda res, x: res | x, map(Q, [('{0}__isnull'.format(field.name), False) for field in self.model._meta.fields]), Q()))
但我认为第二种情况等同于qs.all(),因为无论如何你已经填写了id字段...排除id字段将self.model._meta.fields替换为self.model._meta.fields[1:]
要测试代码替换那个块:
.format(field.name), False) for field in self.model._meta.fields
与
.format(field_name), False) for field_name in ('some_field1', 'some_field2', )
【讨论】: