Wie erhalte ich eine Liste aller IDs / Primärschlüssel für eine Tabelle? Angenommen, ich habe diese Tabelle:
class Blog(models.Model)
title = models.CharField()
body = models.CharField()
author = models.ForeignKey(Author)
übernimmt das Feld Autor ist ein Autor Objekt. Ich möchte alle IDs von Blog erhalten, wobei author = author
Ich weiß, ich kann verwenden
blogs = Blog.objects.filter(author=author)
und alle Blog-Objekte in einer Listenform erhalten, aber wie erhalte ich die Liste IDS / PK? Ähnlich wie "ID aus Blog auswählen, wobei Autor = Autor"
sql
django
django-models
ibaguio
quelle
quelle
not_authored_blog = Author.objects.exclude(blog__id__in=blogs)
. Ich habe eine andere Tabelle, die FK hat, um zu "bloggen" und möchte die Objekte in der anderen Tabelle erhalten, die nicht FK in "Blog" ist. komplizierter als dasblog_set
zugehörige Manager über Datensätze verfügt. Wenn es leer ist, hat dieser Autor keine Blogs. Es ist viel besser als Ihre Ausschlussabfrage, die möglicherweise als großeNOT IN
Klausel übersetzt wird.Antworten:
Sie können dies mit der
values_list
Methode tun .Weitere Informationen finden Sie in der Dokumentation zum Django-Abfrageset .
quelle
values_list()
Gibt eine Liste von Zeilen an, wobei jede Zeile der Reihe nach ein Tupel aller Felder enthält, die Sie als Argumente angeben. Wenn Sie nur ein einzelnes Feld als Argument übergeben, können Sie auch angebenflat=True
, dass anstelle einer Liste von Tupeln eine einfache Liste abgerufen werden soll.quelle
pk
stattdessen zu verwendenid
, da der interne Wertpk
immer auf das Primärschlüsselfeld verweist, auch wenn es nicht "id" heißt.Setzen Sie
pk
stattdessenid
nur für Best Practices.quelle
values_list
Es gibt Tupel zurück, wenn es wiederholt wird. Jedes Tupel enthält den Wert aus dem jeweiligen Feld oder Ausdruck, der an die values_list () übergeben wird.author = Blog.objects.filter(author=author) ids = author.values_list('pk', flat=True) # list method get ids without parse the returning queryset print(list(ids))
quelle