Запрос к базе данных Django: Как получить объект по идентификатору? - PullRequest
73 голосов
/ 29 ноября 2010

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

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

object = Class.objects.filter() 

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

Ответы [ 2 ]

138 голосов
/ 29 ноября 2010

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

obj = Class.objects.get(pk=this_object_id)
12 голосов
/ 28 сентября 2013

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

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

Читая код внутри loading.py Джанго, я пришел к выводу, что у моего settings.py был неверный путь к моему приложению, которое содержит мое определение модели Class. Все, что мне нужно было сделать, это исправить путь к приложению, и метод get() выполнялся нормально.

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

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

) * * тысяча двадцать-один

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

...