Podczas pisania zapytań django można użyć zarówno id / pk jako parametrów zapytania.
Object.objects.get(id=1)
Object.objects.get(pk=1)
Wiem, że pk oznacza Primary Key i jest tylko skrótem, zgodnie z dokumentacją django. Jednak nie jest jasne, kiedy należy używać id lub pk.
django
orm
primary-key
Sztuka
źródło
źródło
id
i zapk
Odpowiedzi:
To nie ma znaczenia
pk
jest bardziej niezależny od rzeczywistego pola klucza pierwotnego czyli nie trzeba dbać, czy pole klucz podstawowy jest nazywanyid
lubobject_id
czy cokolwiek innego.Zapewnia również większą spójność, jeśli masz modele z różnymi polami klucza podstawowego.
źródło
id
jest również wbudowaną funkcją Pythona, dlatego wolę używać pk z tego powodu.pk
lepiej. Zobacz dokumentację wbudowanej funkcjiid
w standardowej bibliotece Python. (Tak samo jest w Pythonie 2 ).W projektach Django, o których wiem, że
pk
zawsze zwracaid
, wolę używać,id
gdy nie koliduje zid()
funkcją (wszędzie oprócz nazw zmiennych). Wynika to z tego, żepk
jest to właściwość 7 razy wolniejsza niżid
czasochłonne wyszukiwaniepk
nazwy atrybutumeta
.Oto odpowiedni kod Django:
To naprawdę rzadki przypadek, kiedy muszę użyć zmiennej o nazwie
pk
. Wolę używać czegoś bardziej szczegółowego, jakuser_id
zamiastpk
.Przestrzeganie tej samej konwencji jest preferowane w całym projekcie. W twoim przypadku
id
jest to nazwa parametru, a nie właściwość, więc prawie nie ma różnicy w taktowaniu. Nazwy parametrów nie kolidują z nazwą wbudowanejid()
funkcji, więc można z niej bezpiecznie korzystaćid
.Podsumowując, od Ciebie zależy, czy chcesz użyć nazwy pola,
id
czypk
skrótu. Jeśli nie tworzysz biblioteki dla Django i używasz automatycznych pól klucza podstawowego dla wszystkich modeli, możesz bezpiecznie używaćid
wszędzie, co czasami jest szybsze. Z drugiej strony, jeśli chcesz mieć uniwersalny dostęp do (prawdopodobnie niestandardowych) pól klucza głównego, używaj gopk
wszędzie. Jedna trzecia mikrosekundy to nic dla sieci.źródło