Was ist in Django der Unterschied zwischen den folgenden beiden:
Article.objects.values_list('comment_id', flat=True).distinct()
vs.
Article.objects.values('comment_id').distinct()
Mein Ziel ist es, eine Liste mit eindeutigen Kommentar-IDs unter jedem zu erhalten Article
. Ich habe die Dokumentation gelesen (und tatsächlich beide Ansätze verwendet). Die Ergebnisse scheinen offensichtlich ähnlich zu sein.
django
django-models
django-queryset
django-orm
Hassan Baig
quelle
quelle
if self.id in Article.objects.values_list('comment_id', flat=True):
während Sie Werte verwenden, die Sie benötigen, um auf das WörterbuchArticle.objects.filter(comment_id=self.id).exists()
?Antworten:
Die
values()
Methode gibt ein QuerySet zurück, das Wörterbücher enthält:Die
values_list()
Methode gibt ein QuerySet zurück, das Tupel enthält:Wenn Sie
values_list()
ein einzelnes Feld verwenden, können Sieflat=True
ein QuerySet mit einzelnen Werten anstelle von 1-Tupeln zurückgeben:quelle
distinct()
wird verwendet, nicht wahr?distinct()
dass es anders funktioniert. Wichtig ist, mit welcher Datenstruktur Sie arbeiten möchten.values()
gibt aQuerySet
und nicht a zurücklist
. Obwohl das von zurückgegebene Objektvalues()
wie a aussiehtlist
, verhält es sich in einigen Fällen nicht wie eines. Zum Beispiel wird es nicht json serialisierbar sein, es sei denn, wir konvertieren es in eine "Liste"values_list
in eine echte Python-Liste leicht konvertieren, indem Sie einfach dielist
Funktion verwenden:list(Article.objects.values_list('comment_id', flat=True).distinct())
Werte()
Gibt ein QuerySet zurück
dictionaries
, das bei Verwendung als Iterable anstelle von Modellinstanzen zurückgibt .values_list ()
Gibt ein QuerySet zurück
list of tuples
, das bei Verwendung als Iterable anstelle von Modellinstanzen zurückgibt .unterscheiden ()
verschiedene sind an
eliminate the duplicate
Elemente gewöhnt.Beispiel:
quelle
values
distinct()
Entfernt die doppelten Elemente aus den Abfrageergebnissen, nicht aus der Datenbank.Sie können die verschiedenen Werte erhalten mit:
quelle