我正在努力将应用程序从 Django/MySQL 改进为 Flask/mongo-engine,并且在创建带有
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-engine 给出了 ValidationError -- 对于上述模型的文档Field is required: ['id'] Invalid Object ID: ['auto_id_0']
。
我还尝试使用
db_field
参数,如
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)
这对我有用:
class Location(db.Document):
_id = db.ObjectIdField()
id = db.IntField(unique=True)
name = db.StringField(max_length=200, required=True)
# other fields in the document ...
这导致
id
IntField() 正确地从 Mongo 获取 id
字段。