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