在烧瓶/ mongoengine文档中添加自定义ID字段
问题描述:
我正在从Django/MySQL将应用程序改造成烧瓶/ mongo-engine &我无法创建带有id
字段的模型。这是一个简单的模型:在烧瓶/ mongoengine文档中添加自定义ID字段
class Location(db.Document):
id = db.IntField(unique=True)
name = db.StringField(max_length=200, required=True)
# other fields in the document ...
为了向后兼容,我需要命名为是场id
。这用于在MySQL中正常工作,但mongo引擎为上述模型的文档提供ValidationError - Field is required: ['id'] Invalid Object ID: ['auto_id_0']
。
我也尝试使用db_field
参数作为
id = db.IntField(db_field='l_id', unique=True)
...但无济于事。
请注意,我没有打算覆盖默认的ObjectID
字段。是否有任何解决方法,除了重命名反序列化字段?
答
尝试
class Location(db.Document):
myid = db.IntField(db_field='id', unique=True)
name = db.StringField(max_length=200, required=True)
# other fields in the document ...
而且它仿佛场被命名为身份识别码操作。
Location.objects.create(myid=real_id)
Location.objects.filter(myid=real_id)
这将覆盖存储ObjectID的默认id字段。无论如何,我尝试了很多,并且问了很多问题,但没有找到保留原始ID字段的方法,也没有添加名为'id'的应用程序级模型字段以及其他一些数据库字段名称。 因此,我最终在模型中添加了一个名为l_id的新字段,并在我的API响应中将其序列化。 – Utkarsh
是的。我终于意识到,文档将_id复制到mongoengine中的id字段中,但是我为db_field指定了自定义名称 –