2016-05-31 157 views
1

我正在從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字段。是否有任何解決方法,除了重命名反序列化字段?

回答

1

嘗試

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) 
+0

這將覆蓋存儲ObjectID的默認id字段。無論如何,我嘗試了很多,並且問了很多問題,但沒有找到保留原始ID字段的方法,也沒有添加名爲'id'的應用程序級模型字段以及其他一些數據庫字段名稱。 因此,我最終在模型中添加了一個名爲l_id的新字段,並在我的API響應中將其序列化。 – Utkarsh

+0

是的。我終於意識到,文檔將_id複製到mongoengine中的id字段中,但是我爲db_field指定了自定義名稱 –