[英]Using Django generic CreateView with field editable=False
我正在使用類似於/foo/1/bar/create
的url方案,在該方案中,我創建的Bar
對象的ID為1,該對象的外鍵指向現有的Foo
對象。使用editable=False
在Bar
內進行Foo
。
Django文檔為處理字段editable=False
或您已從表單中排除但在save()
上必填的字段提供了一些一般性建議,但沒有針對使用通用CreateView
任何建議。
我的CreateBarView
已經通過URL獲取了Foo
ID,因此它已經在視圖的self.kwargs
。 我正在嘗試接受通用視圖以保持干燥。
在Django的通用視圖中是否有直接的方法? 尤其是不必對表單進行子類化?
注意:覆蓋get_initial()
不起作用,我相信文檔也支持。
編輯:Django 1.9
閱讀Django通用視圖后,如果我遵循一般文檔 ,例如,通過get_form_kwargs
覆蓋get_form()
可能是最直接的方法,例如,
class FormMixin(...): # from django.views.generic.edit
def get_form(self, form_class=None):
"""
Returns an instance of the form to be used in this view.
"""
if form_class is None:
form_class = self.get_form_class()
return form_class(**self.get_form_kwargs())
所以,
class CreateBarView(...):
def get_form_kwargs(self):
kwargs = super(CreateBarView, self).get_form_kwargs()
kwargs['instance'] = Bar(foo_id=self.kwargs['foo_id'])
return kwargs
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.