2017-05-30 46 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

你對此有何提議? –