Nul*_*ify 5 python django mongodb mongoengine
我在MongoDB中有一个Organization数据库.我正在尝试使用该数据库保存数据mongoengine.我正在使用Djnago服务器.当我创建对象然后它的工作正常但在编辑后给出了一些错误.
class Organization(Document):
username= StringField()
ancestors = ListField(ReferenceField('Organization',dbref=False), default = list)
parents = ListField(ReferenceField('Organization',dbref=False),default = list)
descendants = ListField(ReferenceField('Organization',dbref=False), default = list)
obj1 = Organization(username = 'kousik')
obj1.save()
<Organization: Organization object> #obj1 created
obj2 = Organization(username = 'chowdhury',ancestors = [obj1],parents=[obj1])
obj2.save()
<Organization: Organization object> #obj2 created
obj3 = Organization(username = 'kchowdhury',ancestors = [obj1,obj2],parents=[obj2])
obj3.save()
<Organization: Organization object> #obj3 creaed
obj1.descendants = [obj2,obj3]
obj1.save()
<Organization: Organization object> #obj1 updated
obj2.descendants = [obj3]
obj2.save()
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
obj2.save()
File "C:\Python27\lib\site-packages\mongoengine\document.py", line 267, in save
raise OperationError(message % unicode(err))
OperationError: Could not save document (LEFT_SUBFIELD only supports Object: ancestors.0 not: 7)
Run Code Online (Sandbox Code Playgroud)
这是 mongoengine 错误。我为此创建了问题:https ://github.com/MongoEngine/mongoengine/issues/422 。
目前的解决方案:
在更新之前使用完整的重新加载文档(只是reload不起作用,因为留下引用):
obj1 = Organization.objects(username=obj1.username).first()
obj1.descendants = [obj2, obj3]
obj1.save()
obj2 = Organization.objects(username=obj2.username).first()
obj2.descendants = [obj3]
obj2.save()
Run Code Online (Sandbox Code Playgroud)请改用原子更新save。
to_dbref供参考使用:
obj1 = Organization(username='kousik')
print obj1.save()
# <Organization: Organization object> #obj1 created
obj2 = Organization(username='chowdhury', ancestors=[obj1.to_dbref()], parents=[obj1.to_dbref()])
print obj2.save()
# <Organization: Organization object> #obj2 created
obj3 = Organization(username='kchowdhury', ancestors=[obj1.to_dbref(), obj2.to_dbref()], parents=[obj2.to_dbref()])
print obj3.save()
# <Organization: Organization object> #obj3 creaed
obj1.descendants = [obj2.to_dbref(), obj3.to_dbref()]
print obj1.save()
# <Organization: Organization object> #obj1 updated
obj2.descendants = [obj3.to_dbref()]
print obj2.save()
# <Organization: Organization object> #obj2 updated
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
703 次 |
| 最近记录: |