2013-07-16 17 views
-3

所以我試圖調用mongoengine中的更新函數,但我需要傳入一個變量。我基本上有一個DictField的模型,我試圖看到它的價值。所以,我有類似Python:在表達式中使用變量(或調用mongoengine更新函數)

models.py

class MyDoc(Document): 
    dictField = DictField() 

在views.py

val = "some random value" 
MyDoc.update(set__dictField__str(holder.id)=val) 

但它不斷給我一個錯誤,當我嘗試偶校驗模塊那說

** keyword can't be an expression 

當我改成了這個

holderId = str(holder.id) 
val = "some random value" 
MyDoc.update(set__dictField__holderId=val) 

它使用的「holderId」作爲鍵,而不是評估,以實際值STR(holder.id)。無論如何要解決這個問題嗎?

+0

你要什麼參數'MyDoc .update'接收? – user2357112

+0

我希望它執行設置dictField [holderId] = VAL,除了holderId是一個變量,而不是密鑰的實際名稱 –

回答

3

看看下面的例子:

class MyDoc(Document): 
    dictField = DictField() 

    def __unicode__(self): 
     return unicode(self.dictField) 

MyDoc.objects.delete() 

MyDoc(dictField={'a': {'b': {'c': 5}}}).save() 
print MyDoc.objects.first() 
# {u'a': {u'b': {u'c': 5}}} 

MyDoc.objects.update(set__dictField__a__b__c=0) 
print MyDoc.objects.first() 
# {u'a': {u'b': {u'c': 0}}} 

例如,如果str(holder.id)回報id1234,然後請求將看起來像:

MyDoc.objects.update(set__dictField__id1234=val) 

MyDoc.objects.update(**{'set__dictField__' + str(holder.id): val}) 
+0

只是爲了澄清一些問題,我試着用unset做同樣的事情並得到一個錯誤。我嘗試了MyDoc.objects.update(** {'unset__dictField__'+ str(holder.id):val})來移除綁定,並收到錯誤消息:「無法編碼對象:

+0

看起來像'val'是不是'字典' – tbicr

+0

等等,那麼我怎樣才能從字典中刪除一個密鑰呢?除了'unset'之外,它沒有使用相同的格式嗎? –