장고 데이터베이스 쿼리 : ID로 객체를 얻는 방법?


105

Django는 자동으로 id 필드를 기본 키로 만듭니다.

이제이 ID로 개체를 가져와야합니다.

object = Class.objects.filter() 

이 필터를 작성하는 방법?

답변:


179

객체를 얻으려면 사용 get()이 더 간단합니다.

obj = Class.objects.get(pk=this_object_id)

18
FYI pk는 모든 모델의 기본 키를 참조하는 데 선호되는 방법입니다. 이 id필드는 모델 작성자가 기본 키를 구체적으로 지정하지 않은 경우에만 생성됩니다. 저자는 경우 이름이되지 않은 기본 키 필드를 지정 id, 다음이되지 않습니다 id필드.
Craig Trader

또한 FYI, id객체의 ID를 반환하는 내장 함수입니다. 대부분의 경우에서 참조 id하는 것은 Class.objects.get(id=this_object_id)작업과 같은 올바른 작업을 수행합니다. 하지만 그건 제가 생각하기에 고려해야 할 사항입니다.
Tom

15

나는 같은 문제로 여기에 왔지만 다른 이유로 :

Class.objects.get(id=1)

이 코드는 ImportError 예외를 발생 시켰습니다. 나를 혼란스럽게하는 것은 아래 코드가 제대로 실행되고 예상대로 결과 집합을 반환했다는 것입니다.

Class.objects.all()

get()메서드 에 대한 트레이스 백의 꼬리 :

File "django/db/models/loading.py", line 197, in get_models
    self._populate()
File "django/db/models/loading.py", line 72, in _populate
    self.load_app(app_name, True)
File "django/db/models/loading.py", line 94, in load_app
    app_module = import_module(app_name)
File "django/utils/importlib.py", line 35, in import_module
    __import__(name)
ImportError: No module named myapp

Django 's 내부의 코드를 읽으면서 내 모델 정의 를 포함하는 내 앱에 대한 잘못된 경로가 loading.py있다는 결론에 도달했습니다 . 내가해야 할 일은 앱의 경로를 수정하고 메서드가 잘 실행되는 것 뿐 이었습니다.settings.pyClassget()

여기 settings.py에 수정 된 경로가 있습니다.

INSTALLED_APPS = (
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    # ...
    'mywebproject.myapp',

)

모든 혼란은 Django의 ORM을 독립형으로 사용하기 때문에 발생했기 때문에 네임 스페이스는이를 반영해야했습니다.


2

다음을 수행 할 수도 있습니다.

obj = ClassModel.get_by_id(object_id)

이것은 작동하지만 Django 2에서 지원되는지 확실하지 않을 수 있습니다.


2

당신이 사용할 수있는:

objects_all=Class.objects.filter(filter_condition="")

이것은 하나의 객체를 가져 오더라도 쿼리 세트를 반환합니다. 정확히 하나의 개체가 필요한 경우 :

obj=Class.objects.get(conditon="")

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.