2017-05-30 66 views
0

我试图用Mongoengine和Django来执行一个简单的插入操作。保存()在Mongoengine中不起作用

关于我的项目结构,简单地说,我有一个项目,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) 

位于内部在进行一个项目的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

我该如何解决这个问题?

+0

是否mongoengine即使Django的1.11/ – e4c5

+0

工作,我不知道。任何人都知道吗? –

+0

它只兼容1.8。对我来说,真正的秘密就是人们为什么要把django和mongo结合起来。这不是世界上最好的组合。 Django的优势在于它是非常棒的ORM。这甚至应该如何与NoSQL系统一起工作? – e4c5

回答

1

编辑: 我找到了确凿证据,目前MongoEngine的Django的支持是不稳定的,它对应的Django 1.9版:

  1. MongoEngine documentation上Django的支持状态:

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

    6.1。把招工广告!

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

  2. 导致this repo,在以下陈述:

    这是不稳定的项目,如果你想用它 - 修正了你所需要的
    现在,我们正瞄准让事情在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可以或不能在Django版本> 1.8的情况下良好运行。

祝你好运:)

+0

其实,我在这个问题中没有提到它,但是我已经在我粘贴的代码之前尝试了您的提议。它没有工作:) –

+0

那么也许它不被支持作为一个行动? :/ –

+0

你对此有何提议? –