带有自定义字段形式的ModelForm的UpdateView

问题描述 投票:0回答:1

我有两个模型

Model A:
   fieldA1
   fieldA2

Model B:
   fieldA = ForeignKey(A)
   fieldB1
   fieldB2

我需要创建ModelFormB,但我还需要通过表单将值插入到Model 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和fielda2完全空白。

在更新视图期间如何将值发送到fielda1和fielda2?

django django-class-based-views modelform
1个回答
0
投票

默认情况下,UpdateView仅更新单个模型。保存模型B时,可以覆盖get_initial()和form_valid()来更新模型A。

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']
        return response
© www.soinside.com 2019 - 2024. All rights reserved.