从 values() 或 values_list() 中排除字段

Posted

技术标签:

【中文标题】从 values() 或 values_list() 中排除字段【英文标题】:Exclude field from values() or values_list() 【发布时间】:2013-05-27 02:52:49 【问题描述】:

有没有一种有效的方法可以从函数values()values_list 中排除字段。

例如

Videos.objects.filter(id=1).get().values()

我想从这个查询集中排除字段duration

我知道我可以指定我想要在结果中包含的字段,但是如果我想要所有内容但只有一个字段不想要怎么办。就像我有 20 个字段而我只想要其中一个字段的情况一样。

谢谢

【问题讨论】:

【参考方案1】:

您必须使用defer 这不会将定义的字段添加到您的select 查询中。

Videos.objects.filter(...).defer('duration')

【讨论】:

在使用 defer() 之前,请阅读 note in the documentation:它适用于高级用例。【参考方案2】:

可以先获取所有字段,再弹出不想要的字段:

fields = Video._meta.get_all_field_names()
fields.remove('id')
Video.object.filter(...).values(*fields)

【讨论】:

直接获取字段名可以使用:Video._meta.get_all_field_names() get_all_field_names() 方法在不久前被弃用并被删除。现在你必须这样做:[f.name for f in Video._meta.get_fields()],看到这个答案:***.com/a/3106314/4744341

以上是关于从 values() 或 values_list() 中排除字段的主要内容,如果未能解决你的问题,请参考以下文章

081:QuerySet API详解-values和values_list

带有 flat=true 的 Values_list 仍然显示 <QuerySet [..]>

django 视图 使用orm values_list()方法获取指定字段的数据

带有 flat=True 的 Values_list 仍然显示括号

Django QuerySet values_list 返回未知字符

如果是多个值,则在.values_list时排除对象