save()在Mongoengine

时间:2017-05-30 06:47:33

标签: python django mongodb rest 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之外,我得到了预期的输出。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

    关于Django支持状态的
  1. MongoEngine documentation

      

    Django支持已从主要的MongoEngine存储库中分离出来。遗留的Django扩展可能与MongoEngine的0.9版本捆绑在一起。

      

    <强> 6.1。求助!

         

    MongoEngine团队正在寻找帮助并为MongoEngine维护一个新的Django扩展!如果您有Django经验,并希望为该项目做出贡献,请通过邮件列表或GitHub提供帮助。

  2. 这导致this repo,其中陈述如下:

      

    这是不稳定的项目,如果您想使用它 - 修复您需要的东西
      现在我们的目标是让Django 1.9上的东西正常工作

  3. 因此,它可能无法在此状态下与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可以或不能与Django版本良好协作的具体证明&gt; 1.8。

    祝你好运:)