所以这主要是一个 Mongoengine 问题,但看看错误,问题似乎出在底层的 pymongo 层中,所以我想我应该提到两者。基本上我有一个像这样的模型 编辑:更新以显示更多的类定义
class MyModel(Document):
dictField = DictField()
class PermHolder(Document):
meta = {'allow_inheritance': True}
....
class ValClass(PermHolder):
....
在我的代码中,我试图使用原子更新来操作该字典(在尝试正常方法和保存之前,我遇到了奇怪的竞争条件问题)。另外,因为 key 是一个变量,所以我不得不使用 kwargs 作为更新函数的参数
modelObject = MyModel.objects.get(id=blah)
valVar = ValClass.objects.get(id=blah)
# This works at adding the binding modelObject[keyVar] = valVar
modelObject.update(**{'set__dictField__' + keyVar: valVar })
...
# Trying to remove the binding later on
modelObject.update(**{'unset__dictField__' + keyVar: valVar })
所以当我尝试删除时的第二个电话给了我错误
Cannot encode object: <ValClass: 51e94b55bc616310e5e4f3fb>
这很奇怪,因为 set 命令有效。有没有另一种方法可以删除它并且我使用了不正确的语法?