Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python mongoengine操作保存时出错_Python_Django_Mongodb_Mongoengine - Fatal编程技术网

Python mongoengine操作保存时出错

Python mongoengine操作保存时出错,python,django,mongodb,mongoengine,Python,Django,Mongodb,Mongoengine,我正在编写一个python脚本来填充mongodb数据库,我的模型如下所示: from mongoengine import * from mongoengine.django.auth import User class TrackGroup (Document): name = StringField(required=True) users = ListField(ReferenceField('User')) devices = ListField(Refere

我正在编写一个python脚本来填充mongodb数据库,我的模型如下所示:

from mongoengine import *
from mongoengine.django.auth import User

class TrackGroup (Document):
    name = StringField(required=True)
    users = ListField(ReferenceField('User'))
    devices = ListField(ReferenceField('Device'))

class Device(Document):
    name = StringField(max_length=50, required=True)
    grp = ListField(ReferenceField(TrackGroup))

class User(User):
    first_name = StringField(max_length=50)
    last_name = StringField(max_length=50)
    grp = ListField(ReferenceField(TrackGroup))
我的剧本是这样的:

#Create a group
gName = 'group name'
g = TrackGroup(name=gName)
g.users = []
g.devices = []
g.save()

#create a user
u = User.create_user(username='name', password='admin', email='mail@ex.com')
gRef = g
u.grp = [gRef, ]
u.first_name = 'first'
u.last_name = 'last'
u.save()
gRef.users.append(u)
gRef.save()

#create a device
dev = Device(name='name').save()
gRef = g
dev.grp = [gRef, ]
dev.save()
gRef.devices.append(dev)
gRef.save()     #Problem happens here
当我调用
gRef.save()
时,出现了以下错误:

raise OperationError(message % unicode(err))
mongoengine.errors.OperationError: Could not save document (LEFT_SUBFIELD only supports Object: users.0 not: 7)
我四处看了一会儿,它说这意味着我试图用一个空键设置一个字段,如下所示:(示例来自上面的链接,而不是我的链接)

我不知道这样一个字段来自哪里,但我打开了一个mongo shell,查看了三个集合中的文档,却找不到这样一个字段


注意:如果我先添加设备,则在添加用户后保存组时会出现相同的错误。

我也有相同的错误,这个技巧对我有效:

the_obj_causing_error.reload()
/* make some change */
the_obj_causing_error.price = 5
the_obj_causing_error.save()

只需在更改对象之前尝试
reload()

Hi Agent1891,您从那时起解决了这个问题吗?@Jiequan不幸的是,没有:(我将数据库的一部分迁移到mysql,因此导致此问题的部分不再存在。现在我只对一个集合使用monogo。但是,如果我找到解决方案,我会发布它。
the_obj_causing_error.reload()
/* make some change */
the_obj_causing_error.price = 5
the_obj_causing_error.save()