1

所以这主要是一个 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 命令有效。有没有另一种方法可以删除它并且我使用了不正确的语法?

4

1 回答 1

1

IfvalVar是一个类的实例并由 objectId 存储 - 尝试:

modelObject.update(**{'unset__dictField__' + keyVar: valVar.id })
于 2013-07-23T07:54:09.713 回答