这可能很简单,但我就是不知道如何去做。
我想将某些行中的所有列作为列表。我知道我可以使用 values_list 和 flat=True 并列出所有列,但这是唯一的方法吗?
我想做这样的事情:
rows = FOO.objects.filter(bar='baz')
Run Code Online (Sandbox Code Playgroud)
并获取列表列表而不是 FOO 对象列表。
tri*_*het 10
您可以通过以下方式获取所有字段的名称:
model._meta.get_all_field_names()
Run Code Online (Sandbox Code Playgroud)
或者
[field.name for field in model._meta.get_fields()] # for Django >= 1.9
Run Code Online (Sandbox Code Playgroud)
因此,您可以执行以下操作:
FOO.objects.filter(<your filter>).values_list( * FOO._meta.get_all_field_names(), flat=True)
Run Code Online (Sandbox Code Playgroud)
如果您不想传递字段名称,则可以执行以下操作:
FOO.objects.values_list()
Run Code Online (Sandbox Code Playgroud)
您可以在参考资料中看到:“如果您没有将任何值传递给 values_list(),它将按照声明的顺序返回模型中的所有字段”
编辑
引用的链接不再可用。它可以在docs上看到。
在 Django >1.9 中执行此操作的现代方法:
[f.get_attname() for f in Restaurant._meta.fields]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18001 次 |
| 最近记录: |