Просто чтобы исключить очевидное - вы ничего не передаете конструктору формы. Вы пробовали это с instance=user_school
? Там может быть больше, что нужно работать, но я бы начал там.
Чтобы немного расширить это - по вашему мнению, вы полностью переоцениваете встроенные get
метод Это нормально, но это означает, что вы обходите часть автоматического поведения вашего Superclass. В частности, 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
, и свяжите его с формой в зависимости от необходимости.