Al escribir consultas django, uno puede usar tanto id / pk como parámetros de consulta.
Object.objects.get(id=1)
Object.objects.get(pk=1)
Sé que pk significa Clave primaria y es solo un acceso directo, según la documentación de django. Sin embargo, no está claro cuándo se debe usar id o pk.
django
orm
primary-key
Arte
fuente
fuente
id
y parapk
Respuestas:
No importa.
pk
es más independiente del campo de clave principal real, es decir que no es necesario preocuparse de si el campo de clave principal se llamaid
oobject_id
lo que sea.También proporciona más coherencia si tiene modelos con diferentes campos de clave principal.
fuente
id
también es una función incorporada en Python, prefiero usar pk por eso.pk
es preferible. Consulte la documentación de la función incorporadaid
en la biblioteca estándar de Python. (Es lo mismo en Python 2. )En los proyectos de Django donde sé que
pk
siempre regresaid
, prefiero usarlosid
cuando no entran en conflicto con laid()
función (en todas partes, excepto los nombres de variables). La razón de esto es quepk
es una propiedad que es 7 veces más lenta queid
desde que lleva tiempo buscar elpk
nombre del atributometa
.Aquí está el código Django relevante:
Es realmente un caso raro cuando necesito usar una variable llamada
pk
. Prefiero usar algo más detallado, como enuser_id
lugar depk
.Seguir la misma convención es preferible en todo el proyecto. En su caso,
id
es un nombre de parámetro, no una propiedad, por lo que casi no hay diferencia en los tiempos. Los nombres de los parámetros no coinciden con el nombre de laid()
función incorporada, por lo que es seguro usarid
aquí.En resumen, depende de usted elegir si desea usar el nombre del campo
id
o elpk
acceso directo. Si no está desarrollando una biblioteca para Django y utiliza campos de clave primaria automáticos para todos los modelos, es seguro usarlos enid
todas partes, lo que a veces es más rápido. Por otro lado, si desea acceso universal a los campos de clave primaria (probablemente personalizados), utilícelos enpk
todas partes. Un tercio de microsegundo no es nada para la web.fuente