MongoEngine新手求助:如何从字段中获取字符串值?
如何从MongoEngine字段中获取字符串值
嘿,刚上手MongoEngine踩这个坑太正常了!我来给你拆解下问题所在,以及怎么正确拿到字段的字符串值:
为啥你现在的代码打印的是对象地址?
你写的打印代码是在类定义的阶段执行的——这时候MongoEngine的字段还只是类的属性,是Field对象本身,还没和具体的文档实例绑定,根本没有实际存储的字符串值,所以打印出来的自然是字段对象的内存地址啦。
正确的打开方式:在实例层面访问字段
要拿到实际的字符串值,必须等你创建了类的实例(也就是MongoDB里的文档)之后,再访问实例的属性。或者在类的实例方法里操作,因为实例方法里的self就是当前的文档实例。
给你改好的代码示例:
from mongoengine import Document, fields # 先定义AbstractApplication,不然AccessToken的ReferenceField会找不到它 class AbstractApplication(Document): client_id = fields.StringField( max_length=100, unique=True, default=generate_client_id, db_index=True ) # 写个实例方法来打印client_id def show_client_id(self): print(f"client_id: {self.client_id}") class AccessToken(Document): application = fields.ReferenceField(AbstractApplication) extras = fields.StringField(blank=True) # 实例方法里访问实例的字段 def show_token_details(self): # 先确认application关联了实例,再访问client_id if self.application: print(f"application.client_id: {self.application.client_id}") print(f"extras: {self.extras}") # --- 实际使用的时候这么做 --- # 先创建并保存AbstractApplication实例(会自动生成client_id) my_app = AbstractApplication() my_app.save() # 创建AccessToken实例,关联刚才的app,设置extras my_token = AccessToken(application=my_app, extras="测试额外信息") my_token.save() # 调用实例方法打印值 my_app.show_client_id() my_token.show_token_details() # 也可以直接访问实例属性拿到字符串 print(f"直接获取client_id:{my_app.client_id}") print(f"直接获取extras:{my_token.extras}")
额外提醒
- 对于
ReferenceField,要确保关联的文档实例已经保存到数据库(或者创建时就关联已存在的实例),不然直接访问self.application.client_id可能会报错。 - 类定义阶段只能用来配置字段(比如设置
default参数),不能用来获取实际的数据值——数据都是存在实例里的哦!
内容的提问来源于stack exchange,提问作者C.D.
相关产品推荐
相关产品推荐

