Beim Schreiben von Django-Abfragen kann man beide id / pk als Abfrageparameter verwenden.
Object.objects.get(id=1)
Object.objects.get(pk=1)
Ich weiß, dass pk für Primary Key steht und laut Djangos Dokumentation nur eine Abkürzung ist. Es ist jedoch nicht klar, wann man id oder pk verwenden soll.
django
orm
primary-key
Kunst
quelle
quelle
id
und fürpk
Antworten:
Es spielt keine Rolle.
pk
ist unabhängig von dem Primärschlüsselfeld tatsächlichen dh, ob das Primärschlüsselfeld heißt nicht brauchen zu kümmernid
oderobject_id
oder was auch immer.Es bietet auch mehr Konsistenz, wenn Sie Modelle mit unterschiedlichen Primärschlüsselfeldern haben.
quelle
id
ist auch eine in Python eingebaute Funktion, deshalb bevorzuge ich die Verwendung von pk.pk
ist vorzuziehen. Weitere Informationen finden Sie in der Dokumentation der integrierten Funktionid
in der Python-Standardbibliothek. (Es ist das gleiche in Python 2. )In Django-Projekten, von denen ich weiß, dass sie
pk
immer zurückkehren,id
bevorzuge ich die Verwendung,id
wenn sie nicht mit derid()
Funktion kollidieren (überall außer Variablennamen). Der Grund dafür ist, dasspk
es sich um eine Eigenschaft handelt, die siebenmal langsamer ist alsid
die Suche nachpk
Attributnamen inmeta
.Hier ist der relevante Django-Code:
Es ist wirklich ein seltener Fall, wenn ich eine Variable mit dem Namen verwenden muss
pk
. Ich bevorzuge es, etwas ausführlicheres zu verwenden,user_id
anstattpk
.Die Befolgung derselben Konvention ist für das gesamte Projekt vorzuziehen. In Ihrem Fall
id
handelt es sich um einen Parameternamen, nicht um eine Eigenschaft, sodass sich die Timings kaum unterscheiden. Parameternamen kollidieren nicht mit dem Namen der integriertenid()
Funktion, daher ist die Verwendung sicherid
hier .Zusammenfassend liegt es an Ihnen, zu entscheiden, ob Sie den Feldnamen
id
oder diepk
Verknüpfung verwenden möchten. Wenn Sie keine Bibliothek für Django entwickeln und für alle Modelle automatische Primärschlüsselfelder verwenden, können Sie dieseid
überall verwenden, was manchmal schneller ist. Wenn Sie andererseits universellen Zugriff auf (wahrscheinlich benutzerdefinierte) Primärschlüsselfelder wünschen, verwenden Sie diesepk
überall. Eine Drittel-Mikrosekunde ist nichts für das Web.quelle