Django автоматически создает поле id в качестве первичного ключа.
Теперь мне нужно получить объект по этому id.
object = Class.objects.filter()
Как записать этот фильтр?
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 loading.py
, я пришел к выводу, что мой settings.py
имел неправильный путь к моему приложению, который содержит мое определение модели Class
. Все, что мне нужно было сделать, это правильный путь к приложению, а метод get()
выполнен отлично.
Вот мой 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="")