我正在使用类似于/foo/1/bar/create
的url方案,我正在创建一个Bar
对象,该对象具有id为1的现有Foo
对象的外键。已使用Foo
将外键字段移回Bar
editable=False
内。
Django docs提供了一些关于处理字段editable=False
的一般建议,或者您从表单中排除但save()
所需的字段,但没有任何特定的建议使用通用CreateView
。
我的CreateBarView
已经通过网址获取了Foo
个ID,因此它已经位于视图的self.kwargs
中。我正试图接受通用视图以保持干燥。
在Django的通用视图中是否有直接的方法?特别是不必将表格子类化?
注意:覆盖get_initial()
不起作用,我相信文档支持这一点。
编辑:Django 1.9
答案 0 :(得分:0)
阅读Django通用视图,如果我按照常规docs进行get_form()
,看起来如果通过get_form_kwargs
覆盖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
所以,
{{1}}