MCPcopy
hub / github.com/django/django / _create_formsets

Method _create_formsets

django/contrib/admin/options.py:2631–2664  ·  view source on GitHub ↗

Helper function to generate formsets for add/change_view.

(self, request, obj, change)

Source from the content-addressed store, hash-verified

2629 return formset_params
2630
2631 def _create_formsets(self, request, obj, change):
2632 "Helper function to generate formsets for add/change_view."
2633 formsets = []
2634 inline_instances = []
2635 prefixes = {}
2636 get_formsets_args = [request]
2637 if change:
2638 get_formsets_args.append(obj)
2639 for FormSet, inline in self.get_formsets_with_inlines(*get_formsets_args):
2640 prefix = FormSet.get_default_prefix()
2641 prefixes[prefix] = prefixes.get(prefix, 0) + 1
2642 if prefixes[prefix] != 1 or not prefix:
2643 prefix = "%s-%s" % (prefix, prefixes[prefix])
2644 formset_params = self.get_formset_kwargs(request, obj, inline, prefix)
2645 formset = FormSet(**formset_params)
2646
2647 def user_deleted_form(request, obj, formset, index, inline):
2648 """Return whether or not the user deleted the form."""
2649 return (
2650 inline.has_delete_permission(request, obj)
2651 and "{}-{}-DELETE".format(formset.prefix, index) in request.POST
2652 )
2653
2654 # Bypass validation of each view-only inline form (since the form's
2655 # data won't be in request.POST), unless the form was deleted.
2656 if not inline.has_change_permission(request, obj if change else None):
2657 for index, form in enumerate(formset.initial_forms):
2658 if user_deleted_form(request, obj, formset, index, inline):
2659 continue
2660 form._errors = {}
2661 form.cleaned_data = form.initial
2662 formsets.append(formset)
2663 inline_instances.append(inline)
2664 return formsets, inline_instances
2665
2666
2667class InlineModelAdmin(BaseModelAdmin):

Callers 1

_changeform_viewMethod · 0.95

Calls 6

get_formset_kwargsMethod · 0.95
appendMethod · 0.45
get_default_prefixMethod · 0.45
getMethod · 0.45
has_change_permissionMethod · 0.45

Tested by

no test coverage detected