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()
< p > get()
方法的回溯(traceback)尾部:
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,因此名称空间必须反映这一点。
你还可以使用 Django 中的 get_object_or_404 快捷方式。如果未找到对象,则它会引发 404 错误。
您可以使用:
objects_all=Class.objects.filter(filter_condition="")
obj=Class.objects.get(conditon="")
您还可以执行以下操作:
obj = ClassModel.get_by_id(object_id)
如果您没有某个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)
id
是一个内置函数,用于返回对象的标识。在大多数情况下,通过id
引用对象会起到正确的作用,例如Class.objects.get(id=this_object_id)
。但这也是需要考虑的事情吧。 - Tom