首页 > 解决方案 > 带有自定义字段表单的 ModelForm 的 UpdateView

问题描述

我有两个模型

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]

亩更新查看代码:

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

问题是,在模板中我只能看到 ModelB(fieldb1,fieldb2) 实例初始值,但 fielda1 和 fielda2 完全空白。

如何在 updateview 期间将值发送到 fielda1 和 fielda2?

标签: djangodjango-class-based-viewsmodelform

解决方案


默认情况下,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']
        form.instance.fieldA.save()
        return response

推荐阅读