명백한 것을 배제하기 위해 - 당신은 양식 생성자에게 아무것도 전달하지 않습니다. 당신은 그것을 시도 했습니까? instance=user_school
? 더 많은 작업이 필요할 수도 있지만 거기서 시작할 것입니다.
이것을 조금 확장하려면 - 당신의 관점에서, 당신은 내장을 완전히 무시하고 있습니다. get
방법. 괜찮지 만 View 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
, 적절한 양식에 바인딩하십시오.