Djangoのクエリで特定のカラムの値をリストで取得する

Djangoでクエリの実行結果として、特定のカラムのみ取得するにはvaluesが使えます

例えばこんなモデルがあるとして

class Book(models.Model):
    title = models.CharField(max_length=100)
    published = models.DateField()

titleだけ取得する場合は以下のように書けます。
取得されるのは、辞書のリストになります。

>>> Book.objects.values('title')
[{'title': u'Clean Corder'}, {'title': u'アジャイルサムライ'}, {'title': u'ハッカーと画家'}]


値だけをリストで取得したい場合は、リスト内包表記を使ってvaluesで返された値を変換することもできますが

>>> [book['title'] for book in Book.objects.values('title')]
[u'Clean Corder',  u'アジャイルサムライ', u'ハッカーと画家']

こういう場合はvalues_listを使うと同じ結果を得られます。
(ただしflat=Trueを渡す必要がある)

>>> Book.objects.values_list('title', flat=True)
[u'Clean Corder',  u'アジャイルサムライ', u'ハッカーと画家']

flat=Trueを渡さないと、タプルのリストが返されます。

>>> Book.objects.values_list('title')
[(u'Clean Corder', ),  (u'アジャイルサムライ', ), (u'ハッカーと画家', )]


ちなみにカラム名を2つ以上指定して、flat=Trueを渡すとTypeErrorになります

TypeError: 'flat' is not valid when values_list is called with more than one field.