在flask/mongoengine文档中添加自定义id字段

在flask/mongoengine文档中添加自定义id字段,flask,mongoengine,flask-mongoengine,Flask,Mongoengine,Flask Mongoengine,我正在将一个应用程序从Django/MySQL改造为flask/mongo引擎&我在创建一个带有id字段的模型时遇到了问题。这是一个示例模型: class Location(db.Document): id = db.IntField(unique=True) name = db.StringField(max_length=200, required=True) # other fields in the document ... 为了向后兼容,我需要名为as is的

我正在将一个应用程序从Django/MySQL改造为flask/mongo引擎&我在创建一个带有
id
字段的模型时遇到了问题。这是一个示例模型:

class Location(db.Document):
    id = db.IntField(unique=True)
    name = db.StringField(max_length=200, required=True)
    # other fields in the document ...
为了向后兼容,我需要名为as is的字段
id
。这在MySQL中正常工作,但mongo引擎提供了ValidationError--
字段是必需的:['id']无效的对象id:['auto\u id\u 0']
,用于上述模型的文档

我还尝试使用
db_字段
参数,如中所示

id = db.IntField(db_field='l_id', unique=True)
…但没有用

请注意,我无意覆盖mongodb的默认
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 ...
并对其进行操作,就好像该字段名为myid一样

Location.objects.create(myid=real_id)
Location.objects.filter(myid=real_id)

这将覆盖存储ObjectID的默认id字段。无论如何,我试了很多次,询问了很多次,但没有找到一种方法可以保留原始的id字段,并添加一个名为“id”的应用程序级模型字段和其他一些db字段名。因此,我最终在模型中添加了一个名为l_id的新字段,并在API响应中序列化它。我最终意识到文档将_id复制到mongoengine中的id字段中,但我为db_字段指定了自定义名称