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