【问题标题】:UpdateView for ModelForm with custom field form带有自定义字段表单的 ModelForm 的 UpdateView
【发布时间】:2020-04-02 16:24:58
【问题描述】:

我有两个模型

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?

【问题讨论】:

    标签: django django-class-based-views modelform


    【解决方案1】:

    默认情况下,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
    

    【讨论】:

      猜你喜欢
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 2019-10-04
      • 2020-08-09
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多