Django automatycznie tworzy pole id jako klucz podstawowy.
Teraz muszę pobrać obiekt za pomocą tego identyfikatora.
object = Class.objects.filter()
Jak napisać ten filtr?
django
django-models
django-orm
user469652
źródło
źródło
pk
to preferowany sposób odwoływania się do klucza podstawowego dla dowolnego modelu.id
Pole jest generowane tylko wtedy, gdy model autor nie specjalnie wyznaczają klucz podstawowy. Jeśli autor nie określił pola klucza podstawowego, który nie jest imieniemid
, wtedy nie będzieid
pola.id
we wbudowanej funkcji, która zwraca tożsamość obiektu. W większości przypadków odwoływanie się do rzeczyid
będzie dobre, npClass.objects.get(id=this_object_id)
. Zadziała. Ale to chyba coś do rozważenia.Dostałem się tutaj z tego samego problemu, ale z innego powodu:
Ten kod generował wyjątek ImportError. Zmyliło mnie to, że poniższy kod wykonał się poprawnie i zwrócił wynik zgodny z oczekiwaniami:
Ogon śledzenia dla
get()
metody:Czytając kod wewnątrz Django
loading.py
, doszedłem do wniosku, żesettings.py
miałem złą ścieżkę do mojej aplikacji, która zawieraClass
definicję modelu. Wszystko, co musiałem zrobić, to poprawić ścieżkę do aplikacji iget()
poprawnie wykonać metodę.Oto moja
settings.py
z poprawioną ścieżką:)
Całe zamieszanie było spowodowane tym, że używam ORM Django jako samodzielnego, więc przestrzeń nazw musiała to odzwierciedlać.
źródło
Możesz też:
To działa, ale może nie jestem pewien, czy jest obsługiwane w Django 2.
źródło
Możesz użyć:
To zwróci zestaw zapytań, nawet jeśli otrzyma jeden obiekt. Jeśli potrzebujesz dokładnie jednego obiektu, użyj:
źródło
Możesz także użyć skrótu get_object_or_404 django. Jeśli obiekt nie zostanie znaleziony, zgłasza błąd 404.
źródło
Jeśli nie masz jakiegoś identyfikatora, np. Mysite.com/something/9182301, możesz użyć
get_object_or_404
importu przezfrom django.shortcuts import get_object_or_404
.Użyj przykładu:
źródło