Подтвердить что ты не робот

Запрос базы данных Django: как получить объект по id?

Django автоматически создает поле id в качестве первичного ключа.

Теперь мне нужно получить объект по этому id.

object = Class.objects.filter() 

Как записать этот фильтр?

4b9b3361

Ответ 1

Если вы хотите получить объект, использование get() более просто:

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

Ответ 2

Я пришел сюда по той же проблеме, но по другой причине:

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 loading.py, я пришел к выводу, что мой settings.py имел неправильный путь к моему приложению, который содержит мое определение модели Class. Все, что мне нужно было сделать, это правильный путь к приложению, а метод get() выполнен отлично.

Вот мой settings.py с исправленным путем:

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

)

Вся путаница была вызвана тем, что я использую Django ORM как автономный, поэтому пространство имен должно было отразить это.

Ответ 3

Вы также можете сделать:

obj = ClassModel.get_by_id(object_id)

Это работает, но, может быть, я не уверен, поддерживается ли это в Django 2.

Ответ 4

Вы можете использовать:

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

Это вернет набор запросов, даже если он получит один объект. Если вам нужен только один объект, используйте:

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