使用mongoengine的get_object_or_404()方法

时间:2013-08-04 00:03:52

标签: python django mongoengine

我开始使用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()方法正常工作?

1 个答案:

答案 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() =>那个引发了你得到的异常)然后我想你会理解。