python - 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(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)

我环顾四周,here它说这意味着我正在尝试设置一个带有空键的字段,如下所示:(该示例来自上面的链接,不是我的)

{
    "_id" : ObjectId("4e52b5e08ead0e3853320000"), 
    "title" : "Something", 
    "url" : "http://www.website.org", 
    "" : "", 
    "tags" : [ "international"]
}

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

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

最佳答案

我遇到了同样的错误,这个技巧对我有用:

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

在更改对象之前先尝试 reload() 对象。

关于python - mongoengine 保存时操作错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16725340/

相关文章:

node.js - 如何使用 Node.Js 在 MongoDB 中插入或更新数组?

python - Django 中的用户类型使用相同的登录名和注册表单

Python/PyGame 从类/方法创建具有随机属性的随机怪物

jquery - django bootstrap 下拉菜单不工作

c# - 网络开发新手。 ASP.NET 还是 Django?

django - 使用 nginx、django 和 celery 正确设置多个网站

Python 安装程序 : "0x80070642 - User cancelled installation"

python - 为什么 5^(4-4) + 9 和 (5^(4-4)) + 9 的结果不同?

c# - 我们如何在最新的 mongodb c# 驱动程序中使用 CreateIndexModel 创建多个索引

java - 在 mongodb 集合中找到一些值?