【问题标题】:django - check which fields have only null valuesdjango - 检查哪些字段只有空值
【发布时间】:2015-01-21 07:42:06
【问题描述】:

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

【问题讨论】:

    标签: django null django-queryset django-orm


    【解决方案1】:

    如果我的理解正确,第一种情况是 - 仅获取每个字段为 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', )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 2021-09-23
      • 2011-06-29
      • 1970-01-01
      • 2014-04-28
      • 2017-10-08
      • 2013-11-08
      相关资源
      最近更新 更多