from django.db import models class Author(models.Model): name = models.CharField(max_length=100) def __unicode__(self): return self.name class Book(models.Model): author = models.ForeignKey(Author) title = models.CharField(max_length=100) def __unicode__(self): return self.title __test__ = {'API_TESTS': """ >>> from django.newforms.models import _modelformset_factory >>> qs = Author.objects.all() >>> AuthorFormSet = _modelformset_factory(Author, extra=3) >>> formset = AuthorFormSet(queryset=qs) >>> for form in formset.forms: ... print form.as_p()
>>> data = { ... 'form-TOTAL_FORMS': '3', # the number of forms rendered ... 'form-INITIAL_FORMS': '0', # the number of forms with initial data ... 'form-0-name': 'Charles Baudelaire', ... 'form-1-name': 'Arthur Rimbaud', ... 'form-2-name': '', ... } >>> formset = AuthorFormSet(data=data, queryset=qs) >>> formset.is_valid() True >>> formset.save() [
>>> data = { ... 'form-TOTAL_FORMS': '3', # the number of forms rendered ... 'form-INITIAL_FORMS': '2', # the number of forms with initial data ... 'form-0-id': '2', ... 'form-0-name': 'Arthur Rimbaud', ... 'form-1-id': '1', ... 'form-1-name': 'Charles Baudelaire', ... 'form-2-name': 'Paul Verlaine', ... } >>> formset = AuthorFormSet(data=data, queryset=qs) >>> formset.is_valid() True # Only changed or new objects are returned from formset.save() >>> formset.save() [
>>> data = { ... 'form-TOTAL_FORMS': '4', # the number of forms rendered ... 'form-INITIAL_FORMS': '3', # the number of forms with initial data ... 'form-0-id': '2', ... 'form-0-name': 'Arthur Rimbaud', ... 'form-1-id': '1', ... 'form-1-name': 'Charles Baudelaire', ... 'form-2-id': '3', ... 'form-2-name': 'Paul Verlaine', ... 'form-3-name': 'Walt Whitman', ... 'form-3-DELETE': 'on', ... } >>> formset = AuthorFormSet(data=data, queryset=qs) >>> formset.is_valid() True # No objects were changed or saved so nothing will come back. >>> formset.save() [] >>> for author in Author.objects.order_by('name'): ... print author.name Arthur Rimbaud Charles Baudelaire Paul Verlaine Let's edit a record to ensure save only returns that one record. >>> data = { ... 'form-TOTAL_FORMS': '4', # the number of forms rendered ... 'form-INITIAL_FORMS': '3', # the number of forms with initial data ... 'form-0-id': '2', ... 'form-0-name': 'Walt Whitman', ... 'form-1-id': '1', ... 'form-1-name': 'Charles Baudelaire', ... 'form-2-id': '3', ... 'form-2-name': 'Paul Verlaine', ... 'form-3-name': '', ... 'form-3-DELETE': '', ... } >>> formset = AuthorFormSet(data=data, queryset=qs) >>> formset.is_valid() True # One record has changed. >>> formset.save() [
>>> data = { ... 'book_set-TOTAL_FORMS': '3', # the number of forms rendered ... 'book_set-INITIAL_FORMS': '0', # the number of forms with initial data ... 'book_set-0-title': 'Les Fleurs du Mal', ... 'book_set-1-title': '', ... 'book_set-2-title': '', ... } >>> formset = AuthorBooksFormSet(data, instance=author) >>> formset.is_valid() True >>> formset.save() [
>>> data = { ... 'book_set-TOTAL_FORMS': '3', # the number of forms rendered ... 'book_set-INITIAL_FORMS': '1', # the number of forms with initial data ... 'book_set-0-id': '1', ... 'book_set-0-title': 'Les Fleurs du Mal', ... 'book_set-1-title': 'Le Spleen de Paris', ... 'book_set-2-title': '', ... } >>> formset = AuthorBooksFormSet(data, instance=author) >>> formset.is_valid() True >>> formset.save() [