2010-01-29 10 views
145

Podczas pisania zapytań django można użyć zarówno id/pk jako parametrów zapytania.Zapytania Django - id kontra pk

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

Wiem, że pk oznacza klucz podstawowy i jest skrótem, zgodnie z dokumentacją django. Jednak nie jest jasne, kiedy należy używać id lub pk.

+0

Oto odpowiednia dokumentacja: [dla "id"] (https://docs.djangoproject.com/en/1.9/topics/db/models/#automatic-primary-key-fields) i [dla '' pk''] (https://docs.djangoproject.com/en/1.9/topics/db/queries/#the-pk-lookup-shortcut) –

+0

Możliwy duplikat [Jaka jest różnica między Model.id a modelem .pk w django?] (http://stackoverflow.com/questions/22345711/whats-the-difference-between-model-id-and-model-pk-in-django) – Travis

+0

Chcesz wiedzieć, czy coś jest bardziej to https://docs.djangoproject.com/en/1.11/topics/db/queries/#copying-model-includes –

Odpowiedz

158

To nie ma znaczenia. pk jest bardziej niezależne od rzeczywistego pola klucza podstawowego, tj. Nie musisz się martwić, czy pole klucza podstawowego jest nazywane id lub object_id lub cokolwiek innego.

Zapewnia także większą spójność, jeśli masz modele z różnymi polami klucza podstawowego.

+17

Tak. Po prostu użyj pk. Zawsze. – cethegeek

+35

'id' jest również wbudowaną funkcją w Pythonie, wolę używać pk z tego powodu. –

+3

Tak, preferowane jest '' pk''. Zobacz [dokumentacja wbudowanej funkcji''id''] (https://docs.python.org/3.5/library/functions.html#id) w standardowej bibliotece Pythona. (Jest to [takie samo w Pythonie 2] (https://docs.python.org/2.7/library/functions.html#id).) –

Powiązane problemy