所以它主要是一個Mongoengine的問題,但看着這個問題似乎是在基礎pymongo層的錯誤,所以我想我應該提及兩者。基本上我有這樣的 編輯模式:更新以顯示更多的類定義如何自動從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 })
所以第二個電話時,我嘗試刪除給我的錯誤
Cannot encode object: <ValClass: 51e94b55bc616310e5e4f3fb>
這是奇怪的因爲set命令起作用了。是否有另一種方法來消除這一點,我使用不正確的語法?
什麼是valVar - 它不能進行編碼 - 它是一個類的實例?你能製作一個完整的測試用例嗎? – Ross
我更新了它以包含完整的測試用例。這實際上是我所說的 –