mongoengine listfield(referencefield a referencefield only accepts dbref, lazyreference报错

文章讲述了在使用MongoDB的PyMongo库操作时,由于前端传递的项目ID是字符串而非ObjectId,导致ListField(ReferenceField)报错。解决方案是对字符串ID转换为ObjectId,并在Model中设置projects字段的dbref为True,以便正确引用其他模型对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

先看定义的user model表

class ModelUser(Document):

    meta = {"collection": "user"}
    name = StringField(required=True,unique=True)
    username = StringField(required=True,unique=True) # 登陆账号
    password =  StringField(required=True) # 登陆密码
    projects = ListField(ReferenceField('ModelProject'), default=[])

一般引起

listfield(referencefield a referencefield only accepts dbref, lazyreference报错

的问题,都是参数传入的时候没有进行转换造成的。
前端传入的的参数数据如下:

    "projects":["6209fd37d1edc3a942cc08","6228073ea8a3eb514c9a83"],

传入的是字符串,而model要求的是ReferenceField,

解决

所以要对projects数据进行转换,转换成obejctid

 data["projects"]=[ObjectId(id_str) for id_str in data.get("projects")]

另外表字段增加dbref字段为true,使其能够与其他模型进行交互并避免任何错误

    projects = ListField(ReferenceField('ModelProject', dbref=True), default=[])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值