我开始使用Mongodb学习Django,在djangoproject教程之后创建一个民意调查应用程序。我提出404错误时遇到问题。 如果我这样做:
def detail(request, poll_id):
try:
poll = Poll.objects.get(pk=poll_id)
except Poll.DoesNotExist:
raise Http404
return render(request, 'polls/detail.html', {'poll': poll})
它有效,但如果我尝试使用django快捷方式:
def detail(request, poll_id):
poll = get_object_or_404(Poll, pk=poll_id)
return render(request, 'polls/detail.html', {'poll': poll})
我收到此错误
Object is of type 'Poll', but must be a Django Model, Manager, or QuerySet
我认为发生此错误是因为在models.py中我将Poll模型定义为mongoengine文档而不是django模型
class Poll(Document):
如何使get_object_or_404()方法正常工作?
答案 0 :(得分:3)
是时候推出自己的快捷方式了吗?
def get_obj_or_404(klass, *args, **kwargs):
try:
return klass.objects.get(*args, **kwargs)
except klass.DoesNotExist:
raise Http404
def detail(request, poll_id):
poll = get_obj_or_404(Poll, pk=poll_id)
return render(request, 'polls/detail.html', {'poll': poll})
我还没有测试过,但这是基本的想法(希望它会马上工作)。
我不认为你做错了什么,只是Django快捷方式不支持Document
类。检查Django源代码,函数get_object_or_404()
(使用函数_get_queryset()
=>那个引发了你得到的异常)然后我想你会理解。