Solo per escludere l'ovvio - non stai passando nulla al costruttore di forma. L'hai provato con instance=user_school
? Potrebbe esserci più che ha bisogno di lavoro ma inizierei da lì.
Per espandersi un po 'su questo - a tuo avviso, stai preparando completamente l'intero get
metodo. Va bene, ma significa che stai aggirando parte del comportamento automatizzato della tua superclasse. In particolare, il get
metodo di ProcessFormView
(una delle tue classi antenati) istanzia il modulo usando il get_form
Metodo della classe Visualizza. FormMixin
, un altro antenato, definisce get_form
:
return form_class(**self.get_form_kwargs())
E get_form_kwargs
Su ModelFormMixin
aggiunge self.object
al modulo kwargs
:
kwargs.update({'instance': self.object})
Perché il tuo sovraccarico get
Il metodo non chiama get_form
, inoltre non chiama get_form_kwargs
E quindi non attraversa l'intero percorso che fornisce un legame iniziale per la forma.
Personalmente proverei a gestirlo modificando il get_object
Metodo della tua vista personalizzata e lasciare il resto da 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
Potrebbero esserci più modifiche necessarie - non l'ho testato - ma sia il get
e set
metodi usa get_object
, e legalo alla forma come appropriato.