Commit 39124035 authored by Brian Rosner's avatar Brian Rosner
Browse files

Added the ability to customize the prefix value on an inline formset. Fixes...

Added the ability to customize the prefix value on an inline formset. Fixes #7899. AThanks for the tip Peter of the Norse.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8060 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 681e7bbd
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -401,13 +401,14 @@ def modelformset_factory(model, form=ModelForm, formfield_callback=lambda f: f.f

class BaseInlineFormset(BaseModelFormSet):
    """A formset for child objects related to a parent."""
    def __init__(self, data=None, files=None, instance=None, save_as_new=False):
    def __init__(self, data=None, files=None, instance=None,
                 save_as_new=False, prefix=None):
        from django.db.models.fields.related import RelatedObject
        self.instance = instance
        self.save_as_new = save_as_new
        # is there a better way to get the object descriptor?
        self.rel_name = RelatedObject(self.fk.rel.to, self.model, self.fk).get_accessor_name()
        super(BaseInlineFormset, self).__init__(data, files, prefix=self.rel_name)
        super(BaseInlineFormset, self).__init__(data, files, prefix=prefix or self.rel_name)
    
    def _construct_forms(self):
        if self.save_as_new:
+9 −0
Original line number Diff line number Diff line
@@ -313,4 +313,13 @@ True
>>> [book for book in formset.save() if book.author.pk == new_author.pk]
[<Book: Les Fleurs du Mal>, <Book: Le Spleen de Paris>]

Test using a custom prefix on an inline formset.

>>> formset = AuthorBooksFormSet(prefix="test")
>>> for form in formset.forms:
...     print form.as_p()
<p><label for="id_test-0-title">Title:</label> <input id="id_test-0-title" type="text" name="test-0-title" maxlength="100" /><input type="hidden" name="test-0-id" id="id_test-0-id" /></p>
<p><label for="id_test-1-title">Title:</label> <input id="id_test-1-title" type="text" name="test-1-title" maxlength="100" /><input type="hidden" name="test-1-id" id="id_test-1-id" /></p>


"""}