编程语言
首页 > 编程语言> > python-在mongoengine中使用get_object_or_404()方法

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