Só para descartar o óbvio - você não está passando nada para o construtor de formulários. Você já tentou com instance=user_school
? Pode haver mais do que precisa de trabalho, mas eu começaria por aí.
Para expandir um pouco isso - na sua opinião, você está substituindo completamente o embutido get
método. Tudo bem, mas significa que você está ignorando alguns dos comportamentos automatizados da sua superclasse. Especificamente, o get
método de ProcessFormView
(uma de suas classes ancestrais) instancia o formulário usando o get_form
Método da classe de vista. FormMixin
, outro ancestral define get_form
:
return form_class(**self.get_form_kwargs())
E get_form_kwargs
sobre ModelFormMixin
adiciona self.object
para o formulário kwargs
:
kwargs.update({'instance': self.object})
Porque você está substituindo get
Método não chama get_form
, também não liga get_form_kwargs
e, portanto, não passa por todo o caminho que fornece uma ligação inicial para o formulário.
Eu pessoalmente tentaria lidar com isso modificando o get_object
Método de sua visualização personalizada e deixando o resto sozinho:
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
Pode haver mais mudanças necessárias - eu não testei isso - mas tanto o get
e set
Métodos usam get_object
, e vinculá -lo ao formulário conforme apropriado.