A collection of instances of the same Form class.
| 50 | |
| 51 | |
| 52 | class BaseFormSet(RenderableFormMixin): |
| 53 | """ |
| 54 | A collection of instances of the same Form class. |
| 55 | """ |
| 56 | |
| 57 | deletion_widget = CheckboxInput |
| 58 | ordering_widget = NumberInput |
| 59 | default_error_messages = { |
| 60 | "missing_management_form": _( |
| 61 | "ManagementForm data is missing or has been tampered with. Missing fields: " |
| 62 | "%(field_names)s. You may need to file a bug report if the issue persists." |
| 63 | ), |
| 64 | "too_many_forms": ngettext_lazy( |
| 65 | "Please submit at most %(num)d form.", |
| 66 | "Please submit at most %(num)d forms.", |
| 67 | "num", |
| 68 | ), |
| 69 | "too_few_forms": ngettext_lazy( |
| 70 | "Please submit at least %(num)d form.", |
| 71 | "Please submit at least %(num)d forms.", |
| 72 | "num", |
| 73 | ), |
| 74 | } |
| 75 | |
| 76 | template_name_div = "django/forms/formsets/div.html" |
| 77 | template_name_p = "django/forms/formsets/p.html" |
| 78 | template_name_table = "django/forms/formsets/table.html" |
| 79 | template_name_ul = "django/forms/formsets/ul.html" |
| 80 | |
| 81 | def __init__( |
| 82 | self, |
| 83 | data=None, |
| 84 | files=None, |
| 85 | auto_id="id_%s", |
| 86 | prefix=None, |
| 87 | initial=None, |
| 88 | error_class=ErrorList, |
| 89 | form_kwargs=None, |
| 90 | error_messages=None, |
| 91 | ): |
| 92 | self.is_bound = data is not None or files is not None |
| 93 | self.prefix = prefix or self.get_default_prefix() |
| 94 | self.auto_id = auto_id |
| 95 | self.data = data or {} |
| 96 | self.files = files or {} |
| 97 | self.initial = initial |
| 98 | self.form_kwargs = form_kwargs or {} |
| 99 | self.error_class = error_class |
| 100 | self._errors = None |
| 101 | self._non_form_errors = None |
| 102 | self.form_renderer = self.renderer |
| 103 | self.renderer = self.renderer or get_default_renderer() |
| 104 | |
| 105 | messages = {} |
| 106 | for cls in reversed(type(self).__mro__): |
| 107 | messages.update(getattr(cls, "default_error_messages", {})) |
| 108 | if error_messages is not None: |
| 109 | messages.update(error_messages) |
nothing calls this directly
no test coverage detected