1

したがって、主に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 コマンドが機能したため、これは奇妙です。これを削除する別の方法はありますか?間違った構文を使用していますか?

4

1 に答える 1