使用Django generic CreateView,字段editable=False
我正在使用一个类似于使用Django generic CreateView,字段editable=False,django,django-forms,django-views,Django,Django Forms,Django Views,我正在使用一个类似于/foo/1/bar/create的url方案,其中我正在创建一个bar对象,该对象的外键指向id为1的现有foo对象。我已使用editable=False将外键字段恢复到Foo中的Bar 对于处理字段editable=False,或者您已从表单中排除但在save()上需要的字段,您可以给出一些一般性建议,但不能给出任何特定于使用通用CreateView的建议 MyCreateBarView已通过url获取Fooid,因此它已位于视图的self.kwargs中。我试图接受一般
/foo/1/bar/create
的url方案,其中我正在创建一个bar
对象,该对象的外键指向id为1的现有foo
对象。我已使用editable=False将外键字段恢复到Foo
中的Bar
对于处理字段editable=False
,或者您已从表单中排除但在save()
上需要的字段,您可以给出一些一般性建议,但不能给出任何特定于使用通用CreateView
的建议
MyCreateBarView
已通过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