python-在mongoengine中使用get_object_or_404()方法
作者:互联网
我开始使用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()方法起作用?
解决方法:
是时候使用您自己的快捷方式了?
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()=>引发您得到的异常),然后我想您会理解的.
标签:python,django,mongoengine 来源: https://codeday.me/bug/20191122/2063784.html