如何检索Django中所有对象的字段列表?

时间:2013-02-01 03:11:07

标签: django

我想从django中的查询中检索一个字段的所有值的列表。例如,我有一个用户查询,但不是用户对象的查询集(或列表),我想要一个列表只是用户名(字符串)。从某种意义上说,这要求仅限制一列数据。

4 个答案:

答案 0 :(得分:43)

你试过吗

User.objects.all().values_list('username', flat=True) 
  

如果只传入一个字段,也可以传入flat参数。如果为True,则表示返回的结果是单个值,而不是一个元组。

答案 1 :(得分:9)

获取用户名列表:

>>> User.objects.all().values('username')
>>> [{'username': u'u1'}, {'username': u'u2'}]

>>> User.objects.all().values_list('username')
>>> [(u'u1',), (u'u2',)]

如果你只想要字符串,列表理解可以解决这个问题:

>>> usr_names = User.objects.all().values('username')
>>> [u['username'] for u in usr_names]
>>> [u'u1', u'u2']

使用values_list

>>> usr_names = User.objects.all().values_list('username')
>>> [u[0] for u in usr_names]
>>> [u'u1', u'u2']

答案 2 :(得分:1)

如您所写:

“而不是用户对象的查询集(或列表)”

上面的查询仍然是查询集

const service = {
  getResults: function() {
    return $.get('https://jsonplaceholder.typicode.com/users');
  }
}

$(function() {
  const dataTableConfig = {
    ajax: async function(data, callback, settings) {
      let response = await service.getResults();
      const formattedResponse = {
        data: response.map(i => Object.values(i))
      };
      callback(formattedResponse);
    },
    columns: [{
        title: "Name"
      },
      {
        title: "Position"
      },
      {
        title: "Office"
      },
      {
        title: "Extn."
      },
      {
        title: "Start date"
      },
      {
        title: "Salary"
      }
    ]
  };
  const UI = {
    SearchBtn: $("#SearchBtn"),
    ResultsTable: $('#ResultsTable').DataTable(dataTableConfig)
  };
  UI.SearchBtn.click(function() {
    UI.ResultsTable.ajax.reload();
  });
});

此解决方案:

usr_names = User.objects.all().values_list('username')

它将返回字符串列表

答案 3 :(得分:0)

获取属性对象列表的最简单方法是首先使用 values_list 单独获取该属性的查询集,然后使用 {{1} 将 django 查询集转换为 python 集} 并最终使用 set() 到一个列表。

在您的场景中:

list()