Last active
June 4, 2019 18:43
-
-
Save airsoull/c048df03f0cd9bcacec8be9495b5b187 to your computer and use it in GitHub Desktop.
Create FormsetView and Update FormsetView in django
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class FormsetViewMixin(object): | |
formset_class = None | |
initial_formset = {} | |
prefix_formset = None | |
def get_formset_class(self): | |
return self.formset_class | |
def get(self, request, *args, **kwargs): | |
self.object = self.get_object() | |
formset = self.get_formset() | |
form = self.get_form() | |
return self.render_to_response( | |
self.get_context_data(formset=formset, form=form) | |
) | |
def post(self, request, *args, **kwargs): | |
self.object = self.get_object() | |
form = self.get_form() | |
formset = self.get_formset() | |
if form.is_valid() and formset.is_valid(): | |
return self.form_valid(form, formset) | |
else: | |
return self.form_invalid(form, formset) | |
def form_valid(self, form, formset): | |
form_valid = super().form_valid(form) | |
formset.instance = self.object | |
formset.save() | |
return form_valid | |
def get_initial_formset(self): | |
"""Return the initial data to use for formset on this view.""" | |
return self.initial_formset.copy() | |
def get_prefix_formset(self): | |
"""Return the prefix to use for formset.""" | |
return self.prefix_formset | |
def get_formset_kwargs(self): | |
kwargs = { | |
'initial': self.get_initial_formset(), | |
'prefix': self.get_prefix_formset(), | |
} | |
if self.request.method in ('POST', 'PUT'): | |
kwargs.update({ | |
'data': self.request.POST, | |
'files': self.request.FILES, | |
}) | |
return kwargs | |
def get_formset(self, formset_class=None): | |
"""Return an instance of the form to be used in this view.""" | |
if formset_class is None: | |
formset_class = self.get_formset_class() | |
return formset_class(**self.get_formset_kwargs()) | |
def form_invalid(self, form, formset): | |
return self.render_to_response( | |
self.get_context_data(form=form, formset=formset) | |
) | |
class FormsetCreateView(FormsetViewMixin, BaseCreateView): | |
def get_object(self, queryset=None): | |
return None | |
class FormsetUpdateView(FormsetViewMixin, BaseUpdateView): | |
def get_formset_kwargs(self): | |
"""Return the keyword arguments for instantiating formset.""" | |
kwargs = super().get_formset_kwargs() | |
if hasattr(self, 'object'): | |
kwargs.update({'instance': self.object}) | |
return kwargs |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment