django - 检查哪些字段只有空值

时间:2014-11-23 15:20:00

标签: django null django-queryset django-orm

我有一个名为QuerySet的特定qs。查询哪些模型字段在数据库中仅包含所有null条记录的qs值的有效方法是什么?
或者 - 您如何获取至少有一个不是null的值的所有字段,并且仅获取它们?

1 个答案:

答案 0 :(得分:2)

如果我理解你的话,第一种情况是 - 只获取那些每个字段为空的对象:

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:] < / p>

测试代码替换该块:

.format(field.name), False) for field in self.model._meta.fields

.format(field_name), False) for field_name in ('some_field1', 'some_field2', )