فقط لاستبعاد ما هو واضح - أنت لا تمرر أي شيء إلى مُنشئ النماذج. هل جربته مع instance=user_school
؟ قد يكون هناك المزيد الذي يحتاج إلى عمل لكنني سأبدأ هناك.
للتوسع في هذا الأمر قليلاً - من وجهة نظرك ، فأنت تتجاوز المدمج بالكامل get
طريقة. هذا جيد ، ولكن هذا يعني أنك تتجاوز بعض السلوك الآلي لرؤيتك الفائقة. على وجه التحديد ، و 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
, ، وربطه بالنموذج حسب الاقتضاء.