Guest User

Untitled

a guest
Nov 20th, 2018
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. class FormsetViewMixin(object):
  2. formset_class = None
  3. initial_formset = {}
  4. prefix_formset = None
  5.  
  6. def get_formset_class(self):
  7. return self.formset_class
  8.  
  9. def get(self, request, *args, **kwargs):
  10. self.object = self.get_object()
  11. formset = self.get_formset()
  12. form = self.get_form()
  13. return self.render_to_response(
  14. self.get_context_data(formset=formset, form=form)
  15. )
  16.  
  17. def post(self, request, *args, **kwargs):
  18. self.object = self.get_object()
  19. form = self.get_form()
  20. formset = self.get_formset()
  21. if form.is_valid() and formset.is_valid():
  22. return self.form_valid(form, formset)
  23. else:
  24. return self.form_invalid(form, formset)
  25.  
  26. def form_valid(self, form, formset):
  27. form_valid = super().form_valid(form)
  28. formset.instance = self.object
  29. formset.save()
  30. return form_valid
  31.  
  32. def get_initial_formset(self):
  33. """Return the initial data to use for formset on this view."""
  34. return self.initial_formset.copy()
  35.  
  36. def get_prefix_formset(self):
  37. """Return the prefix to use for formset."""
  38. return self.prefix_formset
  39.  
  40. def get_formset_kwargs(self):
  41. kwargs = {
  42. 'initial': self.get_initial_formset(),
  43. 'prefix': self.get_prefix_formset(),
  44. }
  45.  
  46. if self.request.method in ('POST', 'PUT'):
  47. kwargs.update({
  48. 'data': self.request.POST,
  49. 'files': self.request.FILES,
  50. })
  51. return kwargs
  52.  
  53. def get_formset(self, formset_class=None):
  54. """Return an instance of the form to be used in this view."""
  55. if formset_class is None:
  56. formset_class = self.get_formset_class()
  57. return formset_class(**self.get_formset_kwargs())
  58.  
  59. def form_invalid(self, form, formset):
  60. return self.render_to_response(
  61. self.get_context_data(form=form, formset=formset)
  62. )
  63.  
  64.  
  65. class FormsetCreateView(FormsetViewMixin, BaseCreateView):
  66.  
  67. def get_object(self, queryset=None):
  68. return None
  69.  
  70.  
  71. class FormsetUpdateView(FormsetViewMixin, BaseUpdateView):
  72.  
  73. def get_formset_kwargs(self):
  74. """Return the keyword arguments for instantiating formset."""
  75. kwargs = super().get_formset_kwargs()
  76. if hasattr(self, 'object'):
  77. kwargs.update({'instance': self.object})
  78. return kwargs
Add Comment
Please, Sign In to add comment