Django自动创建一个id字段作为主键。
现在我需要通过此ID获取对象。
object = Class.objects.filter()
如何编写此过滤器?
答案 0 :(得分:131)
如果你想获得一个对象,使用get()
会更直接:
obj = Class.objects.get(pk=this_object_id)
答案 1 :(得分:12)
我来到这里遇到同样的问题,但出于不同的原因:
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作为独立的,因此命名空间必须反映出来。
答案 2 :(得分:1)
您还可以使用get_object_or_404 django快捷方式。如果找不到对象,则会引发404错误。
答案 3 :(得分:0)
您也可以这样做:
obj = ClassModel.get_by_id(object_id)
这可行,但是我不确定Django 2是否支持。
答案 4 :(得分:0)
您可以使用:
objects_all=Class.objects.filter(filter_condition="")
这将返回一个查询集,即使它得到一个对象。 如果您只需要一个对象,请使用:
obj=Class.objects.get(conditon="")
答案 5 :(得分:0)
如果没有id,例如mysite.com/something/9182301,则可以使用get_object_or_404
导入的from django.shortcuts import get_object_or_404
。
使用示例:
def myFunc(request, my_pk):
my_var = get_object_or_404(CLASS_NAME, pk=my_pk)