问题
先看定义的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=[])