从 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 仍然显示括号