diff options
| author | Loic Bistuer <loic.bistuer@sixmedia.com> | 2013-04-04 02:51:37 +0700 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2013-06-13 15:06:25 -0400 |
| commit | 9e50833e2293aa2734f14f9873abe4f83d03b8c6 (patch) | |
| tree | 68d879969ba722cc9e8b4e37d32746ac8cd119af /docs | |
| parent | dc9c359546580d40df209816cef244b78dcf7435 (diff) | |
Fixed #20000 -- Allowed ModelForm meta overrides for label, help_text and error_messages
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/ref/forms/models.txt | 29 | ||||
| -rw-r--r-- | docs/releases/1.6.txt | 11 | ||||
| -rw-r--r-- | docs/topics/forms/modelforms.txt | 59 |
3 files changed, 72 insertions, 27 deletions
diff --git a/docs/ref/forms/models.txt b/docs/ref/forms/models.txt index b54056af0c..840a896d75 100644 --- a/docs/ref/forms/models.txt +++ b/docs/ref/forms/models.txt @@ -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. diff --git a/docs/releases/1.6.txt b/docs/releases/1.6.txt index e5cd3273dc..d3ba93c4a7 100644 --- a/docs/releases/1.6.txt +++ b/docs/releases/1.6.txt @@ -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. diff --git a/docs/topics/forms/modelforms.txt b/docs/topics/forms/modelforms.txt index d325a15cca..bd9e14aea4 100644 --- a/docs/topics/forms/modelforms.txt +++ b/docs/topics/forms/modelforms.txt @@ -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 + + 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 use ``MyDateFormField`` for the ``pub_date`` +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 |
