使用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
的建议

My
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