python - 在 mongoengine 中使用 get_object_or_404() 方法

标签 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() 方法正常工作?

最佳答案

是时候推出您自己的快捷方式了吗?

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 - 在 mongoengine 中使用 get_object_or_404() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18038501/

相关文章:

python - 多重处理似乎不起作用

python - Django json字段形成字段

python - 如何迁移类似于 Ruby on Rails 迁移的 Django 模型?

django - 自定义 ModelResource 中的字段以下载数据

django - 当集合在 mongo 数据库中有条目时,MongoEngine 对象返回空查询集

python - 无法查询 ListField(EmbeddedDocumentField)

Python:点击一个按钮

python - 避免在 pandas 数据框中重新索引

python - 保存 tiff 堆栈时如何指定颜色图

python - mongoengine bulk upsert 一批记录?