Python:在表达式中使用变量(或调用mongoengine更新函数)
所以我试图在mongoengine中调用update函数,但我需要传入一个变量。我基本上有一个带有DictField的模型,我试图看到它的价值。所以我有点像 在模型中.pyPython:在表达式中使用变量(或调用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):
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)
returnid1234
,那么您的请求将如下所示:
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”之外,它是否使用相同的格式?