UpdateView for ModelForm с настраиваемой формой поля - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть две модели

Model A:
   fieldA1
   fieldA2

Model B:
   fieldA = ForeignKey(A)
   fieldB1
   fieldB2

Мне нужно создать ModelFormB, но мне также нужно вставить значение в модель B через форму. Поэтому я создаю

ModelForm B:
  fielda1 = form.CharField()
  fielda2 = form.CharField()
  class Meta:
     model = ModelB
     field = [fielda1, fielda2, fieldb1, fieldb2]

Mu Код UpdateView:

class ModelBUpdateView(LoginRequiredMixin, UpdateView):
    model = ModelB
    form_class = ModelFormB
    template_name = "....."
    success_url = reverse_lazy('...')

Проблема в том, что в шаблоне я могу видеть только начальное значение экземпляра ModelB (fieldb1, fieldb2), но fielda1 и поля aa2 полностью пустые.

Как я могу отправить значение fielda1 и fielda2 во время просмотра обновлений?

1 Ответ

0 голосов
/ 02 апреля 2020

По умолчанию UpdateView будет обновлять только одну модель. Вы можете переопределить get_initial () и form_valid (), чтобы обновить модель A при сохранении модели B.

class ModelBUpdateView(LoginRequiredMixin, UpdateView):
    model = ModelB
    form_class = ModelFormB
    template_name = "....."
    success_url = reverse_lazy('...')

    def get_initial(self):
        initial = super().get_initial()
        initial['fielda1'] = self.object.fieldA.fieldA1
        initial['fielda2'] = self.object.fieldA.fieldA2
        return initial

    def form_valid(self, form):
        response = super().form_valid(form)
        form.instance.fieldA.fieldA1 = form.cleaned_data['fielda1']
        form.instance.fieldA.fieldA2 = form.cleaned_data['fielda2']
        form.instance.fieldA.save()
        return response
...