繁体   English   中英

save()在Mongoengine中不起作用

[英]save() doesn't work in Mongoengine

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

就我的项目结构而言,我有一个项目AProject和一个应用程序AnApp。 我在IP为XXXX的远程计算机上有一个正在运行的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. 关于Django支持的MongoEngine文档指出:

    Django支持已从MongoEngine主存储库中分离出来。 可以在MongoEngine 0.9发行版中发现旧版Django扩展。

    6.1。 把招工广告!

    MongoEngine团队正在寻求帮助,以帮助您维护MongoEngine的新Django扩展! 如果您具有Django的经验,并且希望为该项目做出贡献,请联系邮件列表或直接在GitHub上进行贡献。

  2. 导致此仓库 ,其中指出以下内容:

    如果您要使用它,这是不稳定的项目-修正您的需求
    现在,我们的目标是使事情在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教程
在本教程中,没有提到受支持的Django版本,但是我还没有找到具体的证据来证明MongoDB Engine在Django版本> 1.8中可以或不能很好地发挥作用。

祝好运 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM