Reputation: 85
I have two model
Model A:
fieldA1
fieldA2
Model B:
fieldA = ForeignKey(A)
fieldB1
fieldB2
I need to create ModelFormB but i need also insert value to Model B via form. So i create
ModelForm B:
fielda1 = form.CharField()
fielda2 = form.CharField()
class Meta:
model = ModelB
field = [fielda1, fielda2, fieldb1, fieldb2]
Mu UpdateView code:
class ModelBUpdateView(LoginRequiredMixin, UpdateView):
model = ModelB
form_class = ModelFormB
template_name = "....."
success_url = reverse_lazy('...')
The problem is, in template i can see only ModelB(fieldb1,fieldb2) instance initial value but fielda1 and fielda2 are completely blank.
How i send the value to fielda1 and fielda2 during updateview?
Upvotes: 0
Views: 1338
Reputation: 638
By default, UpdateView will only update a single model. You could override get_initial() and form_valid() to update model A when you save model 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
Upvotes: 5