Answers:
我到达这里的原因是同样的问题,但是原因不同:
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用作独立的,所以命名空间必须反映这一点。
您可以使用:
objects_all=Class.objects.filter(filter_condition="")
这将返回一个查询集,即使它得到一个对象。如果只需要一个对象,请使用:
obj=Class.objects.get(conditon="")
您也可以使用get_object_or_404 django快捷方式。如果找不到对象,则会引发404错误。
pk
是引用任何模型的主键的首选方式。id
仅当模型作者未专门指定主键时,才生成该字段。如果作者确实指定了一个未命名的主键字段id
,那么将没有id
字段。