Lors de l'écriture de requêtes django, on peut utiliser à la fois id / pk comme paramètres de requête.
Object.objects.get(id=1)
Object.objects.get(pk=1)
Je sais que pk représente la clé primaire et n'est qu'un raccourci, selon la documentation de django. Cependant, il n'est pas clair quand il faut utiliser id ou pk.
id
et pourpk
Réponses:
Ça n'a pas d'importance.
pk
est plus indépendant du champ de clé primaire réelle à dire que vous n'avez pas besoin de prendre soin si le champ de clé primaire est appeléeid
ouobject_id
ou autre.Il offre également plus de cohérence si vous disposez de modèles avec différents champs de clé primaire.
la source
id
est également une fonction intégrée en Python, je préfère utiliser pk à cause de cela.pk
c'est préférable. Voir la documentation de la fonction intégréeid
dans la bibliothèque standard Python. (C'est la même chose dans Python 2. )Dans les projets Django où je sais que ça
pk
revient toujours,id
je préfère utiliserid
quand ça ne heurte pas laid()
fonction (partout sauf les noms de variables). La raison en est qu'ilpk
s'agit d'une propriété 7 fois plus lente que laid
recherche dupk
nom d'attribut en tempsmeta
.Voici le code Django pertinent:
C'est vraiment un cas rare lorsque j'ai besoin d'utiliser une variable nommée
pk
. Je préfère utiliser quelque chose de plus verbeux, commeuser_id
au lieu depk
.Suivre la même convention est préférable pour l'ensemble du projet. Dans votre cas, il
id
s'agit d'un nom de paramètre, et non d'une propriété, il n'y a donc presque aucune différence de synchronisation. Les noms de paramètres ne sont pas en conflit avec le nom de laid()
fonction intégrée, il est donc sûr de l'utiliserid
ici.Pour résumer, c'est à vous de choisir d'utiliser le nom du champ
id
ou lepk
raccourci. Si vous ne développez pas de bibliothèque pour Django et utilisez des champs de clé primaire automatiques pour tous les modèles, il est sûr de les utiliserid
partout, ce qui est parfois plus rapide. D'un autre côté, si vous souhaitez un accès universel aux champs de clé primaire (probablement personnalisés), utilisez-lespk
partout. Un tiers de microseconde n'est rien pour le web.la source