只是为了排除显而易见的事情 - 您不会将任何内容传递给表单构造函数。你尝试过吗 instance=user_school
?可能还有更多需要工作,但我会从那里开始。
要对此进行一些扩展 - 在您看来,您完全覆盖了内置的内置 get
方法。很好,但这意味着您绕过了视图超类的自动化行为。具体来说, get
的方法 ProcessFormView
(您的祖先课程之一)使用 get_form
视图类的方法。 FormMixin
, ,另一个祖先定义 get_form
:
return form_class(**self.get_form_kwargs())
和 get_form_kwargs
上 ModelFormMixin
添加 self.object
表格的 kwargs
:
kwargs.update({'instance': self.object})
因为你覆盖了 get
方法不调用 get_form
, ,也没有打电话 get_form_kwargs
因此,不会穿过为表单提供初始绑定的整个路径。
我个人会尝试通过修改 get_object
自定义视图的方法,其余的单独离开:
class EditSchool(UpdateView):
model = School
success_url = reverse_lazy('list_schools')
form_class = UserSchoolForm
def get_object(self, queryset=None):
school = super(EditSchool, self).get_object(queryset=queryset)
user_school, created = UserSchool.objects.get_or_create(
master_school=school, user=self.request.user,
defaults={'name' : school.name, 'mascot' : school.mascot})
return user_school
可能需要更多的更改 - 我没有测试过 - 但是 get
和 set
方法使用 get_object
, 并将其绑定到适当的形式。