【问题标题】:django: get all columns as a listdjango:将所有列作为列表获取
【发布时间】:2016-05-19 23:09:52
【问题描述】:

这可能很简单,但我就是不知道怎么做。

我想将某些行中的所有列作为一个列表。我知道我可以 使用 values_list 和 flat=True 并列出所有列,但那是 唯一的办法?

我想做这样的事情:

rows = FOO.objects.filter(bar='baz')

并获取列表列表而不是 FOO 对象列表。

【问题讨论】:

  • 不清楚你需要什么,你需要的是获取字段名列表?您能否发布您的查询的预期结果?
  • 我想得到一个列表列表,其中顶层是每一行,在每个列表中,每个项目都是一列。例如,row[0][4] 将是第一行的第五列。

标签: django


【解决方案1】:

您可以通过这种方式获取所有字段的名称:

model._meta.get_all_field_names()

[field.name for field in model._meta.get_fields()]  # for Django >= 1.9

因此,您可以执行以下操作:

FOO.objects.filter(<your filter>).values_list( * FOO._meta.get_all_field_names(), flat=True)

如果您不想传递字段名称,那么您可以这样做:

FOO.objects.values_list()

您可以在reference 中看到:“如果您不向 values_list() 传递任何值,它将按照声明的顺序返回模型中的所有字段

编辑

引用的链接不再可用。可以在docs看到。

【讨论】:

  • 我知道如何获取列名,这不是我的问题。我正在寻找一种无需明确给出所有列名的方法即可将行重新放入列表中。
  • 更新了回复
  • 完美。谢谢。我不知道一个空的 values_list() 会返回所有的列。
【解决方案2】:

在 django >1.9 中执行此操作的现代方式:

[f.get_attname() for f in Restaurant._meta.fields]

【讨论】:

  • 这会获取在模型上实际创建的字段。使用[field.name for field in model._meta.get_fields()] 会抛出与模型关联的所有字段,包括“related_name”关联。
猜你喜欢
  • 1970-01-01
  • 2012-08-06
  • 2018-09-02
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多