2013-01-11 18:59:17 +08:00
|
|
|
====================
|
|
|
|
Model Form Functions
|
|
|
|
====================
|
|
|
|
|
|
|
|
.. module:: django.forms.models
|
|
|
|
:synopsis: Django's functions for building model forms and formsets.
|
|
|
|
|
2013-04-04 03:51:37 +08:00
|
|
|
.. function:: modelform_factory(model, form=ModelForm, fields=None, exclude=None, formfield_callback=None, widgets=None, localized_fields=None, labels=None, help_texts=None, error_messages=None)
|
2013-01-11 18:59:17 +08:00
|
|
|
|
|
|
|
Returns a :class:`~django.forms.ModelForm` class for the given ``model``.
|
|
|
|
You can optionally pass a ``form`` argument to use as a starting point for
|
|
|
|
constructing the ``ModelForm``.
|
|
|
|
|
|
|
|
``fields`` is an optional list of field names. If provided, only the named
|
|
|
|
fields will be included in the returned fields.
|
|
|
|
|
|
|
|
``exclude`` is an optional list of field names. If provided, the named
|
|
|
|
fields will be excluded from the returned fields, even if they are listed
|
|
|
|
in the ``fields`` argument.
|
|
|
|
|
|
|
|
``widgets`` is a dictionary of model field names mapped to a widget.
|
|
|
|
|
|
|
|
``formfield_callback`` is a callable that takes a model field and returns
|
|
|
|
a form field.
|
|
|
|
|
2013-04-04 03:51:37 +08:00
|
|
|
``localized_fields`` is a list of names of fields which should be localized.
|
|
|
|
|
|
|
|
``labels`` is a dictionary of model field names mapped to a label.
|
|
|
|
|
|
|
|
``help_texts`` is a dictionary of model field names mapped to a help text.
|
|
|
|
|
|
|
|
``error_messages`` is a dictionary of model field names mapped to a
|
|
|
|
dictionary of error messages.
|
|
|
|
|
2013-01-11 18:59:17 +08:00
|
|
|
See :ref:`modelforms-factory` for example usage.
|
|
|
|
|
2013-02-22 05:56:55 +08:00
|
|
|
You must provide the list of fields explicitly, either via keyword arguments
|
|
|
|
``fields`` or ``exclude``, or the corresponding attributes on the form's
|
|
|
|
inner ``Meta`` class. See :ref:`modelforms-selecting-fields` for more
|
2014-03-22 08:44:34 +08:00
|
|
|
information. Omitting any definition of the fields to use will result in
|
|
|
|
an :exc:`~django.core.exceptions.ImproperlyConfigured` exception.
|
|
|
|
|
|
|
|
.. versionchanged:: 1.8
|
2013-02-22 05:56:55 +08:00
|
|
|
|
2014-03-22 08:44:34 +08:00
|
|
|
Previously, omitting the list of fields was allowed and resulted in
|
|
|
|
a form with all fields of the model.
|
2013-05-18 20:13:00 +08:00
|
|
|
|
2014-03-06 04:19:40 +08:00
|
|
|
.. function:: modelformset_factory(model, form=ModelForm, formfield_callback=None, formset=BaseModelFormSet, extra=1, can_delete=False, can_order=False, max_num=None, fields=None, exclude=None, widgets=None, validate_max=False, localized_fields=None, labels=None, help_texts=None, error_messages=None, min_num=None, validate_min=False)
|
2013-01-11 18:59:17 +08:00
|
|
|
|
|
|
|
Returns a ``FormSet`` class for the given ``model`` class.
|
|
|
|
|
2013-01-24 04:11:46 +08:00
|
|
|
Arguments ``model``, ``form``, ``fields``, ``exclude``,
|
2013-04-04 03:51:37 +08:00
|
|
|
``formfield_callback``, ``widgets``, ``localized_fields``, ``labels``,
|
|
|
|
``help_texts``, and ``error_messages`` are all passed through to
|
2013-01-22 19:46:22 +08:00
|
|
|
:func:`~django.forms.models.modelform_factory`.
|
2013-01-11 18:59:17 +08:00
|
|
|
|
Fixed #20084 -- Provided option to validate formset max_num on server.
This is provided as a new "validate_max" formset_factory option defaulting to
False, since the non-validating behavior of max_num is longstanding, and there
is certainly code relying on it. (In fact, even the Django admin relies on it
for the case where there are more existing inlines than the given max_num). It
may be that at some point we want to deprecate validate_max=False and
eventually remove the option, but this commit takes no steps in that direction.
This also fixes the DoS-prevention absolute_max enforcement so that it causes a
form validation error rather than an IndexError, and ensures that absolute_max
is always 1000 more than max_num, to prevent surprising changes in behavior
with max_num close to absolute_max.
Lastly, this commit fixes the previous inconsistency between a regular formset
and a model formset in the precedence of max_num and initial data. Previously
in a regular formset, if the provided initial data was longer than max_num, it
was truncated; in a model formset, all initial forms would be displayed
regardless of max_num. Now regular formsets are the same as model formsets; all
initial forms are displayed, even if more than max_num. (But if validate_max is
True, submitting these forms will result in a "too many forms" validation
error!) This combination of behaviors was chosen to keep the max_num validation
simple and consistent, and avoid silent data loss due to truncation of initial
data.
Thanks to Preston for discussion of the design choices.
2013-03-21 14:27:06 +08:00
|
|
|
Arguments ``formset``, ``extra``, ``max_num``, ``can_order``,
|
|
|
|
``can_delete`` and ``validate_max`` are passed through to
|
|
|
|
:func:`~django.forms.formsets.formset_factory`. See :ref:`formsets` for
|
|
|
|
details.
|
2013-01-11 18:59:17 +08:00
|
|
|
|
|
|
|
See :ref:`model-formsets` for example usage.
|
2013-01-22 19:46:22 +08:00
|
|
|
|
2014-03-06 04:19:40 +08:00
|
|
|
.. function:: inlineformset_factory(parent_model, model, form=ModelForm, formset=BaseInlineFormSet, fk_name=None, fields=None, exclude=None, extra=3, can_order=False, can_delete=True, max_num=None, formfield_callback=None, widgets=None, validate_max=False, localized_fields=None, labels=None, help_texts=None, error_messages=None, min_num=None, validate_min=False)
|
2013-01-22 19:46:22 +08:00
|
|
|
|
|
|
|
Returns an ``InlineFormSet`` using :func:`modelformset_factory` with
|
2013-07-08 20:29:28 +08:00
|
|
|
defaults of ``formset=``:class:`~django.forms.models.BaseInlineFormSet`,
|
|
|
|
``can_delete=True``, and ``extra=3``.
|
2013-01-22 19:46:22 +08:00
|
|
|
|
|
|
|
If your model has more than one :class:`~django.db.models.ForeignKey` to
|
|
|
|
the ``parent_model``, you must specify a ``fk_name``.
|
|
|
|
|
|
|
|
See :ref:`inline-formsets` for example usage.
|