MongoEngine插入查询

2024-06-16 15:23:17 发布

您现在位置: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,其详细信息如下以下内容:在

^{pr2}$

我将insert查询作为以下内容:在

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

这就得救了。但是,当我看到mongoshell中的细节时,我得到了以下文档。

{
    "_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__phone和{}字段。这是怎么回事?在

如果我愿意的话

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)

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


Tags: keynameidobjdefaultdbdevicephone
1条回答
网友
1楼 · 发布于 2024-06-16 15:23:17

您的错误在这里:

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

您应该使用StringField的实例,如下所示:

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

然后你就可以随心所欲了:

^{pr2}$

相关问题 更多 >