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.
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]>
Gibt ein QuerySet zurück, das dictionaries
anstelle von Modellinstanzen zurückgibt, wenn es als Iterationsdatei verwendet wird.
Gibt ein QuerySet zurück, das bei Verwendung als Iterable list of tuples
Anstelle von Modellinstanzen zurückgibt.
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}]
Sie können die verschiedenen Werte erhalten mit:
set(Article.objects.values_list('comment_id', flat=True))