mirror of
https://github.com/django/django.git
synced 2025-10-24 14:16:09 +00:00
Fixed #20000 -- Allowed ModelForm meta overrides for label, help_text and error_messages
This commit is contained in:
@@ -5,7 +5,7 @@ Model Form Functions
|
||||
.. module:: django.forms.models
|
||||
:synopsis: Django's functions for building model forms and formsets.
|
||||
|
||||
.. function:: modelform_factory(model, form=ModelForm, fields=None, exclude=None, formfield_callback=None, widgets=None, localized_fields=None)
|
||||
.. 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)
|
||||
|
||||
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
|
||||
@@ -20,11 +20,18 @@ Model Form Functions
|
||||
|
||||
``widgets`` is a dictionary of model field names mapped to a widget.
|
||||
|
||||
``localized_fields`` is a list of names of fields which should be localized.
|
||||
|
||||
``formfield_callback`` is a callable that takes a model field and returns
|
||||
a form field.
|
||||
|
||||
``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.
|
||||
|
||||
See :ref:`modelforms-factory` for example usage.
|
||||
|
||||
.. versionchanged:: 1.6
|
||||
@@ -35,14 +42,16 @@ Model Form Functions
|
||||
information. Omitting any definition of the fields to use will result in all
|
||||
fields being used, but this behavior is deprecated.
|
||||
|
||||
The ``localized_fields`` parameter was added.
|
||||
The ``localized_fields``, ``labels``, ``help_texts``, and
|
||||
``error_messages`` parameters were added.
|
||||
|
||||
.. 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)
|
||||
.. 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)
|
||||
|
||||
Returns a ``FormSet`` class for the given ``model`` class.
|
||||
|
||||
Arguments ``model``, ``form``, ``fields``, ``exclude``,
|
||||
``formfield_callback``, ``widgets`` and ``localized_fields`` are all passed through to
|
||||
``formfield_callback``, ``widgets``, ``localized_fields``, ``labels``,
|
||||
``help_texts``, and ``error_messages`` are all passed through to
|
||||
:func:`~django.forms.models.modelform_factory`.
|
||||
|
||||
Arguments ``formset``, ``extra``, ``max_num``, ``can_order``,
|
||||
@@ -54,9 +63,10 @@ Model Form Functions
|
||||
|
||||
.. versionchanged:: 1.6
|
||||
|
||||
The ``widgets``, ``validate_max`` and ``localized_fields`` parameters were added.
|
||||
The ``widgets``, ``validate_max``, ``localized_fields``, ``labels``,
|
||||
``help_texts``, and ``error_messages`` parameters were added.
|
||||
|
||||
.. 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)
|
||||
.. 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)
|
||||
|
||||
Returns an ``InlineFormSet`` using :func:`modelformset_factory` with
|
||||
defaults of ``formset=BaseInlineFormSet``, ``can_delete=True``, and
|
||||
@@ -69,4 +79,5 @@ Model Form Functions
|
||||
|
||||
.. versionchanged:: 1.6
|
||||
|
||||
The ``widgets``, ``validate_max`` and ``localized_fields`` parameters were added.
|
||||
The ``widgets``, ``validate_max`` and ``localized_fields``, ``labels``,
|
||||
``help_texts``, and ``error_messages`` parameters were added.
|
||||
|
||||
@@ -236,9 +236,14 @@ Minor features
|
||||
.. _`Pillow`: https://pypi.python.org/pypi/Pillow
|
||||
.. _`PIL`: https://pypi.python.org/pypi/PIL
|
||||
|
||||
* :doc:`ModelForm </topics/forms/modelforms/>` accepts a new
|
||||
Meta option: ``localized_fields``. Fields included in this list will be localized
|
||||
(by setting ``localize`` on the form field).
|
||||
* :class:`~django.forms.ModelForm` accepts several new ``Meta``
|
||||
options.
|
||||
|
||||
* Fields included in the ``localized_fields`` list will be localized
|
||||
(by setting ``localize`` on the form field).
|
||||
* The ``labels``, ``help_texts`` and ``error_messages`` options may be used
|
||||
to customize the default fields, see
|
||||
:ref:`modelforms-overriding-default-fields` for details.
|
||||
|
||||
* The ``choices`` argument to model fields now accepts an iterable of iterables
|
||||
instead of requiring an iterable of lists or tuples.
|
||||
|
||||
@@ -141,7 +141,7 @@ In addition, each generated form field has attributes set as follows:
|
||||
``default`` value will be initially selected instead).
|
||||
|
||||
Finally, note that you can override the form field used for a given model
|
||||
field. See `Overriding the default field types or widgets`_ below.
|
||||
field. See `Overriding the default fields`_ below.
|
||||
|
||||
A full example
|
||||
--------------
|
||||
@@ -388,8 +388,10 @@ include that field.
|
||||
|
||||
.. _section on saving forms: `The save() method`_
|
||||
|
||||
Overriding the default field types or widgets
|
||||
---------------------------------------------
|
||||
.. _modelforms-overriding-default-fields:
|
||||
|
||||
Overriding the default fields
|
||||
-----------------------------
|
||||
|
||||
The default field types, as described in the `Field types`_ table above, are
|
||||
sensible defaults. If you have a ``DateField`` in your model, chances are you'd
|
||||
@@ -420,38 +422,65 @@ widget::
|
||||
The ``widgets`` dictionary accepts either widget instances (e.g.,
|
||||
``Textarea(...)``) or classes (e.g., ``Textarea``).
|
||||
|
||||
If you want to further customize a field -- including its type, label, etc. --
|
||||
you can do this by declaratively specifying fields like you would in a regular
|
||||
``Form``. Declared fields will override the default ones generated by using the
|
||||
``model`` attribute.
|
||||
.. versionadded:: 1.6
|
||||
|
||||
For example, if you wanted to use ``MyDateFormField`` for the ``pub_date``
|
||||
The ``labels``, ``help_texts`` and ``error_messages`` options were added.
|
||||
|
||||
Similarly, you can specify the ``labels``, ``help_texts`` and ``error_messages``
|
||||
attributes of the inner ``Meta`` class if you want to further customize a field.
|
||||
|
||||
For example if you wanted to customize the wording of all user facing strings for
|
||||
the ``name`` field::
|
||||
|
||||
class AuthorForm(ModelForm):
|
||||
class Meta:
|
||||
model = Author
|
||||
fields = ('name', 'title', 'birth_date')
|
||||
labels = {
|
||||
'name': _('Writer'),
|
||||
}
|
||||
help_texts = {
|
||||
'name': _('Some useful help text.'),
|
||||
}
|
||||
error_messages = {
|
||||
'name': {
|
||||
'max_length': _("This writer's name is too long."),
|
||||
},
|
||||
}
|
||||
|
||||
Finally, if you want complete control over of a field -- including its type,
|
||||
validators, etc. -- you can do this by declaratively specifying fields like you
|
||||
would in a regular ``Form``. Declared fields will override the default ones
|
||||
generated by using the ``model`` attribute. Fields declared like this will
|
||||
ignore any customizations in the ``widgets``, ``labels``, ``help_texts``, and
|
||||
``error_messages`` options declared on ``Meta``.
|
||||
|
||||
For example, if you wanted to use ``MySlugFormField`` for the ``slug``
|
||||
field, you could do the following::
|
||||
|
||||
from django.forms import ModelForm
|
||||
from myapp.models import Article
|
||||
|
||||
class ArticleForm(ModelForm):
|
||||
pub_date = MyDateFormField()
|
||||
slug = MySlugFormField()
|
||||
|
||||
class Meta:
|
||||
model = Article
|
||||
fields = ['pub_date', 'headline', 'content', 'reporter']
|
||||
|
||||
|
||||
If you want to override a field's default label, then specify the ``label``
|
||||
parameter when declaring the form field::
|
||||
If you want to override a field's default validators, then specify the
|
||||
``validators`` parameter when declaring the form field::
|
||||
|
||||
from django.forms import ModelForm, DateField
|
||||
from myapp.models import Article
|
||||
|
||||
class ArticleForm(ModelForm):
|
||||
pub_date = DateField(label='Publication date')
|
||||
slug = CharField(validators=[validate_slug])
|
||||
|
||||
class Meta:
|
||||
model = Article
|
||||
fields = ['pub_date', 'headline', 'content', 'reporter']
|
||||
|
||||
fields = ['pub_date', 'headline', 'content', 'reporter', 'slug']
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -597,7 +626,7 @@ example by specifying the widgets to be used for a given field::
|
||||
|
||||
>>> from django.forms import Textarea
|
||||
>>> Form = modelform_factory(Book, form=BookForm,
|
||||
widgets={"title": Textarea()})
|
||||
... widgets={"title": Textarea()})
|
||||
|
||||
The fields to include can be specified using the ``fields`` and ``exclude``
|
||||
keyword arguments, or the corresponding attributes on the ``ModelForm`` inner
|
||||
|
||||
Reference in New Issue
Block a user