wake-up-neo.com

Django values_list vs values

Was ist der Unterschied zwischen den folgenden beiden in Django:

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

vs

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

Mein Ziel ist es, eine Liste eindeutiger Kommentar-IDs unter jedem Article zu erstellen. Ich habe die Dokumentation gelesen (und tatsächlich beide Ansätze verwendet). Die Ergebnisse scheinen offenbar ähnlich zu sein.

98
Hassan Baig

Die values() -Methode gibt ein QuerySet zurück, das Wörterbücher enthält:

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

Die values_list() -Methode gibt ein QuerySet zurück, das Tupel enthält:

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

Wenn Sie values_list() mit einem einzelnen Feld verwenden, können Sie flat=True Verwenden, um ein QuerySet von Einzelwerten anstelle von 1-Tupeln zurückzugeben:

<QuerySet [1, 2]>
168
Alasdair

werte()

Gibt ein QuerySet zurück, das dictionaries anstelle von Modellinstanzen zurückgibt, wenn es als Iterationsdatei verwendet wird.

values_list ()

Gibt ein QuerySet zurück, das bei Verwendung als Iterable list of tuples Anstelle von Modellinstanzen zurückgibt.

distinct ()

distinct werden für eliminate the duplicate - Elemente verwendet.

Beispiel:

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}]
36
Ibrahim Kasim

Sie können die verschiedenen Werte erhalten mit:

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