使用Django通用CreateView与字段editable = False

时间:2016-03-29 23:58:51

标签: django django-forms django-views

我正在使用类似于/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

1 个答案:

答案 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}}