Solo para descartar lo obvio: no estás pasando nada al constructor de formulario. Lo has probado con instance=user_school
? Puede haber más que necesite trabajo, pero comenzaría allí.
Para ampliar esto un poco: en su opinión, está anulando por completo el incorporado get
método. Está bien, pero significa que está pasando por alto parte del comportamiento automatizado de su superclase de visión. Específicamente, el get
método de ProcessFormView
(una de sus clases de antepasados) Instancia la forma utilizando el get_form
Método de la clase View. FormMixin
, otro antepasado, define get_form
:
return form_class(**self.get_form_kwargs())
Y get_form_kwargs
en ModelFormMixin
agrega self.object
a la forma kwargs
:
kwargs.update({'instance': self.object})
Porque tu anulación get
El método no llama get_form
, tampoco llama get_form_kwargs
y, por lo tanto, no pasa por toda la ruta que proporcione una unión inicial para la forma.
Personalmente intentaría manejar esto modificando el get_object
Método de su vista personalizada y dejar el resto solo:
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
Puede que se necesiten más cambios, no he probado esto, pero ambos get
y set
Los métodos usan get_object
, y unirlo a la forma según corresponda.