-3

所以我试图在 mongoengine 中调用更新函数,但我需要传入一个变量。我基本上有一个带有 DictField 的模型,我试图看到它的价值。所以我有类似的东西

模型.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)。有没有办法解决这个问题?

4

1 回答 1

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})
于 2013-07-17T05:49:24.613 回答