Django 数据库查询: 如何通过 id 获取对象?

Django 自动创建一个 id 字段作为主键。

现在我需要通过这个 id 得到对象。

object = Class.objects.filter()

如何编写这个过滤器?

211274 次浏览

如果你想得到一个对象,使用 get()会更简单:

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

我来这里也是为了同样的问题,但是原因不同:

Class.objects.get(id=1)

这段代码引发了 Import Error 异常。令我困惑的是,下面的代码执行得很好,并且按照预期返回了一个结果集:

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 作为一个独立的 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错误。

如果你没有一些 id,比如 mysite.com/something/9182301,你可以通过 from django.shortcuts import get_object_or_404使用 get_object_or_404导入。

举例说明:

def myFunc(request, my_pk):
my_var = get_object_or_404(CLASS_NAME, pk=my_pk)