2010-01-29 19 views
145

Quando si scrivono query di django si può usare sia id/pk come parametri di query.Domande di Django - id vs pk

Object.objects.get(id=1) 
Object.objects.get(pk=1) 

So che sta per pk chiave primaria e è solo una scorciatoia, secondo la documentazione di Django. Tuttavia non è chiaro quando si dovrebbe usare id o pk.

+0

Ecco la rispettiva documentazione: [per '' id''] (https://docs.djangoproject.com/en/1.9/topics/db/models/#automatic-primary-key-fields) e [per '' pk''] (https://docs.djangoproject.com/en/1.9/topics/db/queries/#the-pk-lookup-shortcut) –

+0

Possibile duplicato di [Qual è la differenza tra Model.id e Model .pk in django?] (http://stackoverflow.com/questions/22345711/whats-the-difference-between-model-id-and-model-pk-in-django) – Travis

+0

Vuoi sapere se c'è qualcosa di più da it https://docs.djangoproject.com/en/1.11/topics/db/queries/#copying-model-instances –

risposta

158

Non importa. pk è più indipendente dal campo della chiave primaria effettiva, ovvero non ti importa se il campo della chiave primaria è chiamato id o object_id o qualsiasi altra cosa.

Fornisce inoltre maggiore coerenza se si dispone di modelli con campi chiave primari diversi.

+17

Sì. Basta usare pk. Sempre. – cethegeek

+35

'id' è anche una funzione built-in in Python, preferisco usare pk per questo. –

+3

Sì, '' pk'' è preferibile. Vedi la [documentazione della funzione built-in''id''] (https://docs.python.org/3.5/library/functions.html#id) nella libreria standard di Python. (È lo stesso [in Python 2] (https://docs.python.org/2.7/library/functions.html#id).) –