save() 在 Mongoengine 中不起作用

save() doesn't work in Mongoengine

我正在尝试使用 Mongoengine 和 Django 执行简单的插入操作。

关于我的项目结构,我有一个项目 AProject 和一个应用程序 AnApp。我在 IP 为 X.X.X.X 的远程计算机中有一个 运行 mongo。我可以使用 Robomongo 在其中插入文档。

我已经删除了位于 AProject 目录中 settings.py 的默认数据库配置部分。新增线路如下图:

# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

import mongoengine

# ----------- MongoDB stuff

from mongoengine import register_connection
register_connection(alias='default', name='AProject', host='X.X.X.X')

# ----------

现在让我展示位于 AnApp 中的 models.py 和 views.py。

models.py

from mongoengine import Document, StringField

class Confession(Document):
    confession = StringField(required=True)

views.py

from django.http import HttpResponse

from models import Confession
from mongoengine import connect

def index(request):
    connect('HacettepeItiraf', alias='default')
    confession = Confession()
    confession.confession = 'First confession from the API'
    print(confession.confession + ' Printable') # The output is --First confession from the API Printable--
    print(confession.save()) # The output is --Confession object--
    return HttpResponse(request)

AProject里面的urls.py简单如下:

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^confessions/', include('confession.urls')),
    url(r'^admin/', admin.site.urls),
]

当我输入 http://127.0.0.1:10000/confessions/ 时,我看到了我所期望的空白屏幕。然而,API 没有保存任何内容。除了 Confession object.

之外,我得到了预期的输出

我该如何解决这个问题?

编辑: 我找到了具体的证明,目前MongoEngine对Django的支持不稳定,对应的是Django 1.9版本:

  1. MongoEngine documentation Django 支持状态:

    Django support has been split from the main MongoEngine repository. The legacy Django extension may be found bundled with the 0.9 release of MongoEngine.

    6.1. Help Wanted!

    The MongoEngine team is looking for help contributing and maintaining a new Django extension for MongoEngine! If you have Django experience and would like to help contribute to the project, please get in touch on the mailing list or by simply contributing on GitHub.

  2. 这导致 this repo,其中说明如下:

    THIS IS UNSTABLE PROJECT, IF YOU WANT TO USE IT - FIX WHAT YOU NEED
    Right now we're targeting to get things working on Django 1.9

所以有可能在这个状态下或者你的版本不能很好的和Django一起玩,所以才会出现这个问题。


初次尝试,由于遗留原因将其保留在这里。

我认为问题出现在你如何初始化你的对象上,尽管我没有设置来测试这个理论。

一般认为用.create()方法新建对象比较好:

def index(request):
    connect('HacettepeItiraf', alias='default')
    confession = Confession.objects.create(
                     confession='First confession from the API'
                 )
    print(confession.confession + ' Printable')
    confession.save()
    return HttpResponse(request)

查看 Django & MongoDB tutorial 了解更多详情。
在本教程中,没有提到支持的 Django 版本,但我还没有找到具体的证据来证明 MongoDB Engine 可以或不能与 > 1.8 的 Django 版本兼容。

祝你好运:)