Advertisement
gray_beard

inlineformset_factory: не сохраняет second model

Feb 14th, 2022
911
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.33 KB | None | 0 0
  1. =====forms=====
  2. class AdsForm(ModelForm):
  3.     class Meta:
  4.         model = Ads
  5.         exclude = ()
  6.  
  7. PictureFormSet = inlineformset_factory( Ads, Picture, form=AdsForm)
  8.  
  9. =====view (на примере Update; два варианта: второй закоммичен)=====
  10. class AdsEdit(LoginRequiredMixin, UpdateView):
  11.     model = Ads
  12.     template_name = 'main/ads_add.html'
  13.     # fields = ('name', 'description', 'seller', 'category', 'tags', 'price',)
  14.     form_class = AdsForm
  15.     extra_context = {'new': False}
  16.     login_url = '/'
  17.  
  18.     def get_context_data(self, **kwargs):
  19.         context = super().get_context_data(**kwargs)
  20.         if self.request.POST:
  21.             context['pictures'] = PictureFormSet(self.request.POST, self.request.FILES, instance=self.object)
  22.         else:
  23.             context['pictures'] = PictureFormSet(instance=self.object)
  24.         return context
  25.  
  26.     def form_valid(self, form):
  27.         self.object = form.save(commit=False)
  28.         context = self.get_context_data()
  29.         pictures = context['pictures']
  30.         if form.is_valid() and pictures.is_valid:
  31.             self.object = form.save()
  32.             pictures.instance = self.object
  33.             pictures.save()
  34.             return super().form_valid(form)
  35.         else:
  36.             print('Не валидируется!')
  37.             return self.render_to_response(self.get_context_data(form=form))
  38.     # def post(self, request, *args, **kwargs):
  39.     #     self.object = self.get_object()
  40.     #     form_class = self.get_form_class()
  41.     #     form = self.get_form(form_class)
  42.     #     pictures_form = PictureFormSet(self.request.POST, instance=self.object)
  43.     #     if form.is_valid() and pictures_form.is_valid():
  44.     #         return self.form_valid(form, pictures_form)
  45.     #     else:
  46.     #         return self.form_invalid(form, pictures_form)
  47.     #
  48.     # def form_valid(self, form, pictures_form):
  49.     #     self.object = form.save()
  50.     #     pictures_form.instance = self.object
  51.     #     pictures_form.save()
  52.     #     return HttpResponseRedirect(self.get_success_url())
  53.     #
  54.     # def form_invalid(self, form, pictures_form):
  55.     #     print('Не валидируется!')
  56.     #     return self.render_to_response(
  57.     #         self.get_context_data(form=form,
  58.     #                               pictures_form=pictures_form))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement