したがって、主にMongoengineの質問ですが、エラーを見ると、問題は基礎となるpymongoレイヤーにあるように見えるので、両方に言及する必要があると思います. 基本的に私はこの編集のようなモデルを持っています :クラス定義の詳細を表示するように更新されました
class MyModel(Document):
dictField = DictField()
class PermHolder(Document):
meta = {'allow_inheritance': True}
....
class ValClass(PermHolder):
....
私のコードでは、アトミックな更新を使用してその辞書を操作しようとしています (通常の方法を試して保存する前に、奇妙な競合状態の問題がありました)。また、キーは変数であるため、更新関数への引数として 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 })
したがって、削除しようとしたときの2番目の呼び出しでエラーが発生します
Cannot encode object: <ValClass: 51e94b55bc616310e5e4f3fb>
set コマンドが機能したため、これは奇妙です。これを削除する別の方法はありますか?間違った構文を使用していますか?