Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:在表达式中使用变量(或调用mongoengine更新函数)_Python_Django_Mongoengine - Fatal编程技术网

Python:在表达式中使用变量(或调用mongoengine更新函数)

Python:在表达式中使用变量(或调用mongoengine更新函数),python,django,mongoengine,Python,Django,Mongoengine,所以我试图在mongoengine中调用update函数,但我需要传入一个变量。我基本上有一个带有DictField的模型,我试图看到它的价值。所以我有点像 在模型中.py class MyDoc(Document): dictField = DictField() val = "some random value" MyDoc.update(set__dictField__str(holder.id)=val) 在视图中.py class MyDoc(Document):

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

模型中.py

class MyDoc(Document):
    dictField = DictField()
val = "some random value"
MyDoc.update(set__dictField__str(holder.id)=val)
在视图中.py

class MyDoc(Document):
    dictField = DictField()
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)。有没有办法解决这个问题?

看看下一个例子:

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)
return
id1234
,那么您的请求将如下所示:

MyDoc.objects.update(set__dictField__id1234=val)


您希望
MyDoc.update
接收哪些参数?我希望它执行set dictField[holderId]=val,但holderId是一个变量,而不是键的实际名称。只是为了澄清一下,我尝试对unset执行相同的操作,但出现了一个错误。我试图用MyDoc.objects.update(**{unset\uuu dictField\uuu'+str(holder.id):val})删除绑定,但出现了一个错误,错误是“无法对对象进行编码:看起来像
val
不是
dict
。等等,那么我如何从dict中删除密钥?除了“unset”之外,它是否使用相同的格式?