【问题标题】:Django filter empty fieldsDjango过滤空字段
【发布时间】:2021-06-19 14:24:39
【问题描述】:

目前我正在过滤查询集中所有条目中的空字段,如下所示:

data_qs = DataValue.objects.filter(study_id=study.id) #queryset

opts = DataValue._meta  # get meta info from DataValue model
   
field_names = list([field.name for field in opts.fields])  # DataValue fields in a list

field_not_empty = list() # list of empty fields

for field in field_names:
    for entry in data_qs.values(field):
        if entry.get(field) is not None:
            field_not_empty.append(field)
            break

它可以工作,但不确定它是否是一个合适的解决方案......

有谁知道如何过滤所有查询集中的空值?该表有 30 多个字段,因此根据研究 ID,某些查询集可能包含字段 1 全部为空,其他研究 ID 可能包含字段 2 全部为空。

Django ORM 是否提供了一个简单干净的解决方案来做到这一点?

提前致谢

【问题讨论】:

  • 你能解释清楚一点吗?你主要想做什么,过滤有空字段的记录??
  • 当然。不,如果字段包含查询集的任何条目中的值,则应维护。如果所有条目对该字段都有一个空值,那么我想从查询集中排除该字段。因此,当我将该查询集导出为 CSV 时,我可以保存几列,因为这将是一个空列。

标签: django orm django-queryset


【解决方案1】:

要检查 QuerySet 中的某个值是否为空,假设值的名称是“title”。

这将排除所有空字段

DataValue.objects.filter(study_id=study.id).exclude(title__exact='')

如果你只想要空字段,只需过滤它

DataValue.objects.filter(study_id=study.id, title__exact='')

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2021-06-07
    • 2014-08-24
    • 1970-01-01
    • 2017-01-31
    • 2015-05-18
    • 2020-09-20
    相关资源
    最近更新 更多