2016-05-17 71 views
0

我試圖創建一個簡單的ModelForm,我注意到,即使我通過一個實例進行更新一樣,django更新表單,誰傳遞對象ID?

mymodel = MyModel.objects.get(pk=1) 
MyModelForm(instance=mymodel) 

Django不創建一個隱藏字段或包括以某種方式對象的PK在模板中。所以我需要自己通過這個? 我更喜歡不將我的id作爲1,2,3 ..傳遞給模板,所以我寧願傳遞類似於uuid的東西,或者使用signing.dumps(object_id),然後使用django簽名庫中的signing.loads(object_id)
所以,如果我想包括這個id在我的模板與表格POST數據, 我不明白誰是完全負責檢索該id - 是視圖還是表單本身? 通過視圖我的意思是內置的FormViewUpdateView,這些視圖如何找到對象ID?假設將signing.dumps(object_id)的輸出存儲在隱藏字段中

+0

爲什麼你需要通過它的形式?你已經在視圖中擁有了它。 –

+0

以及表格生成所有的字段。並且這個字段(signed id,或uuid)是一個隱藏字段(應該是) – user3599803

+0

[如何從Django中的編輯表單更新對象?](http://stackoverflow.com/questions/4673985/how -to-更新的對象從 - 編輯外形在-django的) – e4c5

回答

1

當您在模板中時,表單構建已完成。你可以嘗試訪問form.instance.id,如果它的modelForm。

但是,很可能你不需要模板中的pk,是嗎?如果你願意,你也可以注入一個帶有實例pk值的隱藏表單域。爲什麼你需要模板中的pk?

如果您想要從POST數據重定向到另一個頁面,您將有權訪問視圖本身中的對象pk。

0

根據官方文檔,內置視圖繼承自django.views.generic.detail.SingleObjectTemplateResponseMixin類,該類需要與其混合的視圖提供self.object屬性。