Tuh*_*hin 0 django modelform django-class-based-views
我有两个型号
Model A:
fieldA1
fieldA2
Model B:
fieldA = ForeignKey(A)
fieldB1
fieldB2
Run Code Online (Sandbox Code Playgroud)
我需要创建 ModelFormB 但我还需要通过表单向模型 B 插入值。所以我创造
ModelForm B:
fielda1 = form.CharField()
fielda2 = form.CharField()
class Meta:
model = ModelB
field = [fielda1, fielda2, fieldb1, fieldb2]
Run Code Online (Sandbox Code Playgroud)
Mu更新查看代码:
class ModelBUpdateView(LoginRequiredMixin, UpdateView):
model = ModelB
form_class = ModelFormB
template_name = "....."
success_url = reverse_lazy('...')
Run Code Online (Sandbox Code Playgroud)
问题是,在模板中我只能看到 ModelB(fieldb1,fieldb2) 实例初始值,但 fielda1 和 fielda2 完全空白。
updateview期间如何将值发送到fielda1和fielda2?
默认情况下,UpdateView 将仅更新单个模型。您可以重写 get_initial() 和 form_valid() 以在保存模型 B 时更新模型 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
Run Code Online (Sandbox Code Playgroud)