Skip to main content
 首页 » 编程设计

python之从 Django 查询集中获取特定属性的更好方法

2025年05月04日39oomusou

我有一个名为 Songs 的模型,它的属性之一是 'title'。

假设我想获取存储在数据库中的所有歌曲名称的列表。

我能做到:

titles = [] 
 
for song in Song.objects.all(): 
    titles.append(song.title) 

有更简单的方法吗?

请您参考如下方法:

您可以使用 .values_list()获取所有歌曲标题的列表。

它将返回元组值列表。每个元组都包含传递给 values_list() 调用的相应字段的值。

Song.objects.values_list('title')  
[('title1',), ('title2',), ('title3',), (u'title4',)] # returns list of tuples 

如果您传入设置为True 的flat 参数,它将以单个值而不是元组的形式返回结果。

Song.objects.values_list('title', flat=True) # pass 'flat' parameter 
['title1', 'title2', 'title3', 'title4'] # returns list of titles  

我想这就是您最初想要得到的。

但请记住,传递带有多个字段的 flat 是错误的。

您还可以使用 .values()获取所有标题,但它会返回字典列表,每个字典代表一个对象,键对应于模型对象的属性名称。

Song.objects.values('title') # using '.values' 
[{'title': 'title1'}, {'title': 'title2'}, {'title': 'title3'}, {'title': 'title4'}] # returns list of dictionaries