web-dev-qa-db-ja.com

Django values_listとvalues

Djangoでは、次の2つの違いは何ですか。

Article.objects.values_list('comment_id', flat=True).distinct()

vs

Article.objects.values('comment_id').distinct()

私の目標は各Articleの下にユニークなコメントIDのリストを取得することです。私はドキュメンテーションを読みました(そして実際に両方のアプローチを使いました)。結果は明らかに似ています。

87
Hassan Baig

values() メソッドは辞書を含むQuerySetを返します。

<QuerySet [{'comment_id': 1}, {'comment_id': 2}]>

values_list() メソッドは、タプルを含むQuerySetを返します。

<QuerySet [(1,), (2,)]>

単一フィールドでvalues_list()を使用している場合は、1タプルの代わりにflat=Trueを使用して単一値のQuerySetを返すことができます。

<QuerySet [1, 2]>
155
Alasdair

values()

イテラブルとして使用された場合、モデルインスタンスではなくdictionariesを返すQuerySetを返します。

values_list()

イテラブルとして使用した場合、モデルインスタンスではなくlist of tuplesを返すQuerySetを返します。

distinct()

distinctはeliminate the duplicate要素に使用されます。

例:

Article.objects.values_list('id', flat=True) # flat=True will remove the tuples and return the list   
[1, 2, 3, 4, 5, 6]

Article.objects.values('id')
[{'id':1}, {'id':2}, {'id':3}, {'id':4}, {'id':5}, {'id':6}]
34
Ibrahim Kasim

さまざまな値を取得できます。

set(Article.objects.values_list('comment_id', flat=True))
1
pitu