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

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

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

object = Class.objects.filter() 

이 필터를 작성하는 방법?



답변

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

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


답변

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

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을 독립형으로 사용하기 때문에 발생했기 때문에 네임 스페이스는이를 반영해야했습니다.


답변

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

obj = ClassModel.get_by_id(object_id)

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


답변

당신이 사용할 수있는:

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

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

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


답변

get_object_or_404 django 바로 가기를 사용할 수도 있습니다 . 객체를 찾을 수 없으면 404 오류가 발생합니다.


답변