我有一个名为Songs的模型,其中一个属性是'title'
。
我想说我想得到一个存储在数据库中的所有歌曲名单。
我能做到:
titles = []
for song in Song.objects.all():
titles.append(song.title)
有更简单的方法吗?
答案 0 :(得分:4)
最佳变体:Song.objects.values('title')
Documentaion:https://docs.djangoproject.com/en/1.8/ref/models/querysets/#values
答案 1 :(得分:4)
您可以使用.values_list()
获取所有歌曲标题的列表。
它将返回元组值列表。每个元组都包含传递给values_list()
调用的相应字段的值。
Song.objects.values_list('title')
[('title1',), ('title2',), ('title3',), (u'title4',)] # returns list of tuples
如果您将flat
参数设置为True
,则会将结果作为单个值返回,而不是一个元组。
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