django:将所有列作为列表

Lar*_*ell 6 django

这可能很简单,但我就是不知道如何去做。

我想将某些行中的所有列作为列表。我知道我可以使用 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上看到。


the*_*cer 8

在 Django >1.9 中执行此操作的现代方法:

[f.get_attname() for f in Restaurant._meta.fields]
Run Code Online (Sandbox Code Playgroud)

  • 这将获取在模型上**实际**创建的字段。使用“[field.name for field in model._meta.get_fields()]”会抛出与模型关联的所有字段,包括“lated_name”关联。 (2认同)