Djangoでは、次の2つの違いは何ですか。
Article.objects.values_list('comment_id', flat=True).distinct()
vs
Article.objects.values('comment_id').distinct()
私の目標は各Article
の下にユニークなコメントIDのリストを取得することです。私はドキュメンテーションを読みました(そして実際に両方のアプローチを使いました)。結果は明らかに似ています。
values()
メソッドは辞書を含むQuerySetを返します。
<QuerySet [{'comment_id': 1}, {'comment_id': 2}]>
values_list()
メソッドは、タプルを含むQuerySetを返します。
<QuerySet [(1,), (2,)]>
単一フィールドでvalues_list()
を使用している場合は、1タプルの代わりにflat=True
を使用して単一値のQuerySetを返すことができます。
<QuerySet [1, 2]>
イテラブルとして使用された場合、モデルインスタンスではなくdictionaries
を返すQuerySetを返します。
イテラブルとして使用した場合、モデルインスタンスではなくlist of tuples
を返すQuerySetを返します。
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}]
さまざまな値を取得できます。
set(Article.objects.values_list('comment_id', flat=True))