Commit 1acd5fc9 authored by Tianyi Wang's avatar Tianyi Wang Committed by Tim Graham
Browse files

[1.5.x] Fixed #21006 -- Added example code for overriding methods on an InlineFormSet.

Thanks treysta at gmail.com for the suggestion.

Backport of 9bfe6616 from master
parent 6e7de2ed
Loading
Loading
Loading
Loading
+26 −3
Original line number Diff line number Diff line
@@ -789,6 +789,7 @@ class's ``clean`` method::
            # example custom validation across forms in the formset:
            for form in self.forms:
                # your custom formset validation
                ...

Using a custom queryset
-----------------------
@@ -909,13 +910,35 @@ a particular author, you could do this::

    :ref:`Manually rendered can_delete and can_order <manually-rendered-can-delete-and-can-order>`.

Overriding ``clean()`` on an ``InlineFormSet``
----------------------------------------------
Overriding methods on an ``InlineFormSet``
------------------------------------------

See :ref:`model-formsets-overriding-clean`, but subclass
When overriding methods on ``InlineFormSet``, you should subclass
:class:`~models.BaseInlineFormSet` rather than
:class:`~models.BaseModelFormSet`.

For example, If you want to override ``clean()``::

    from django.forms.models import BaseInlineFormSet

    class MyModelFormSet(BaseInlineFormSet):
        def clean(self):
            super(MyModelFormSet, self).clean()
            # example custom validation across forms in the formset:
            for form in self.forms:
                # your custom formset validation
                ...

See also :ref:`model-formsets-overriding-clean`.

Then when you create your inline formset, pass in the optional argument
``formset``::

    >>> from django.forms.models import inlineformset_factory
    >>> BookFormSet = inlineformset_factory(Author, Book, formset=MyModelFormSet)
    >>> author = Author.objects.get(name=u'Mike Royko')
    >>> formset = BookFormSet(instance=author)

More than one foreign key to the same model
-------------------------------------------