MongoEngine插入查询

Python爱好者

我有模特 User

class User(db.DynamicDocument):
    user_id = db.UUIDField(primary_key=True,required=True,default=uuid.uuid4)
    name = db.StringField(default='')
    phone = db.ListField(db.StringField,default=list)
    gcm_details = db.ListField(db.EmbeddedDocumentField('UserGCM'),default=list)

其中gcm_details是EmbeddedDocumentField其详细信息,如下所示:-

class UserGCM(db.EmbeddedDocument):
    gcm_key = db.StringField(default='')
    device_id = db.StringField(default='')

我执行插入查询,如下所示:

name = 'something'
phone = ['12345678','456789']
gcm_obj = UserGCM(gcm_key=gcm_key,device_id=device_id)

user = User(name=name,push__phone=phone,push__gcm_details=gcm_obj).save()

这将保存。但是,当我在mongo shell中看到详细信息时,会得到以下文档。

{
    "_id": BinData(3,
    "MjpPJaNTQ823WuA8BP47jQ=="),
    "parent_id": BinData(3,
    "Ig7LNNAVQzCbjYG2KXvQjw=="),
    "name": "something",
    "phone": [

    ],

    "gcm_details": [

    ],

    "push__phone": [
        "9999999999"
    ],
    "push__gcm_details": {
        "gcm_key": "string",
        "device_id": "string",
        "_cls": "UserGCM"
    }
}

请注意为空phonegcm_details字段,以及已添加push__phonepush__gcm_details字段。这是怎么回事?

如果我只是做

user = User(name=name,phone=phone,gcm_details=gcm_obj).save()

如果不使用push__,则会引发错误消息:

TypeError: unbound method _validate() must be called with StringField instance as first argument (got unicode instance instead)

这是怎么回事?我在做什么错?

清醒

您的错误在这里:

电话= db.ListField(db.StringField,默认=列表)

您应该使用StringField类似这样的实例

phone = db.ListField(db.StringField(), default=list)

然后,您将能够做您想做的事情:

name = 'something'
phone = ['12345678', '456789']
gcm = UserGCM(gcm_key=gcm_key, device_id=device_id)
user = User(
    name=name,
    phone=phone,
    gcm_details=[gcm],
).save()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章