diff options
| author | Brian Rosner <brosner@gmail.com> | 2008-08-25 03:51:25 +0000 |
|---|---|---|
| committer | Brian Rosner <brosner@gmail.com> | 2008-08-25 03:51:25 +0000 |
| commit | 82a1d5471cba138d90b5bb99d8313486af06d56a (patch) | |
| tree | c5cfe9a948bd0a3a0c32e192fd8fbae277e607f2 /tests | |
| parent | 05e8c3ecd3a01ce0574040857a02bac04097b36f (diff) | |
Fixed #7888 -- Handle model inheritance with model formsets correctly. Thanks bpeschier for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8528 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/modeltests/model_forms/models.py | 16 | ||||
| -rw-r--r-- | tests/modeltests/model_formsets/models.py | 50 |
2 files changed, 65 insertions, 1 deletions
diff --git a/tests/modeltests/model_forms/models.py b/tests/modeltests/model_forms/models.py index da45f23f74..a2c522a1d9 100644 --- a/tests/modeltests/model_forms/models.py +++ b/tests/modeltests/model_forms/models.py @@ -13,6 +13,12 @@ import tempfile from django.db import models from django.core.files.storage import FileSystemStorage +# Python 2.3 doesn't have sorted() +try: + sorted +except NameError: + from django.utils.itercompat import sorted + temp_storage = FileSystemStorage(tempfile.gettempdir()) ARTICLE_STATUS = ( @@ -60,6 +66,9 @@ class ImprovedArticle(models.Model): class ImprovedArticleWithParentLink(models.Model): article = models.OneToOneField(Article, parent_link=True) +class BetterWriter(Writer): + pass + class PhoneNumber(models.Model): phone = models.PhoneNumberField() description = models.CharField(max_length=20) @@ -91,7 +100,7 @@ class ImageFile(models.Model): __test__ = {'API_TESTS': """ >>> from django import forms ->>> from django.forms.models import ModelForm +>>> from django.forms.models import ModelForm, model_to_dict >>> from django.core.files.uploadedfile import SimpleUploadedFile The bare bones, absolutely nothing custom, basic case. @@ -793,6 +802,11 @@ ValidationError: [u'Select a valid choice. 4 is not one of the available choices >>> ImprovedArticleWithParentLinkForm.base_fields.keys() [] +>>> bw = BetterWriter(name=u'Joe Better') +>>> bw.save() +>>> sorted(model_to_dict(bw).keys()) +['id', 'name', 'writer_ptr_id'] + # PhoneNumberField ############################################################ >>> class PhoneNumberForm(ModelForm): diff --git a/tests/modeltests/model_formsets/models.py b/tests/modeltests/model_formsets/models.py index 5b66d1560b..a5738ab1ac 100644 --- a/tests/modeltests/model_formsets/models.py +++ b/tests/modeltests/model_formsets/models.py @@ -14,6 +14,9 @@ class Author(models.Model): def __unicode__(self): return self.name +class BetterAuthor(Author): + write_speed = models.IntegerField() + class Book(models.Model): author = models.ForeignKey(Author) title = models.CharField(max_length=100) @@ -229,6 +232,53 @@ used. >>> [sorted(x.items()) for x in formset.initial] [[('id', 1), ('name', u'Charles Baudelaire')], [('id', 3), ('name', u'Paul Verlaine')], [('id', 2), ('name', u'Walt Whitman')]] +# Model inheritance in model formsets ######################################## + +>>> BetterAuthorFormSet = modelformset_factory(BetterAuthor) +>>> formset = BetterAuthorFormSet() +>>> for form in formset.forms: +... print form.as_p() +<p><label for="id_form-0-name">Name:</label> <input id="id_form-0-name" type="text" name="form-0-name" maxlength="100" /></p> +<p><label for="id_form-0-write_speed">Write speed:</label> <input type="text" name="form-0-write_speed" id="id_form-0-write_speed" /><input type="hidden" name="form-0-author_ptr_id" id="id_form-0-author_ptr_id" /></p> + +>>> data = { +... 'form-TOTAL_FORMS': '1', # the number of forms rendered +... 'form-INITIAL_FORMS': '0', # the number of forms with initial data +... 'form-0-author_ptr_id': '', +... 'form-0-name': 'Ernest Hemingway', +... 'form-0-write_speed': '10', +... } + +>>> formset = BetterAuthorFormSet(data) +>>> formset.is_valid() +True +>>> formset.save() +[<BetterAuthor: Ernest Hemingway>] + +>>> formset = BetterAuthorFormSet() +>>> for form in formset.forms: +... print form.as_p() +<p><label for="id_form-0-name">Name:</label> <input id="id_form-0-name" type="text" name="form-0-name" value="Ernest Hemingway" maxlength="100" /></p> +<p><label for="id_form-0-write_speed">Write speed:</label> <input type="text" name="form-0-write_speed" value="10" id="id_form-0-write_speed" /><input type="hidden" name="form-0-author_ptr_id" value="4" id="id_form-0-author_ptr_id" /></p> +<p><label for="id_form-1-name">Name:</label> <input id="id_form-1-name" type="text" name="form-1-name" maxlength="100" /></p> +<p><label for="id_form-1-write_speed">Write speed:</label> <input type="text" name="form-1-write_speed" id="id_form-1-write_speed" /><input type="hidden" name="form-1-author_ptr_id" id="id_form-1-author_ptr_id" /></p> + +>>> data = { +... 'form-TOTAL_FORMS': '2', # the number of forms rendered +... 'form-INITIAL_FORMS': '1', # the number of forms with initial data +... 'form-0-author_ptr_id': '4', +... 'form-0-name': 'Ernest Hemingway', +... 'form-0-write_speed': '10', +... 'form-1-author_ptr_id': '', +... 'form-1-name': '', +... 'form-1-write_speed': '', +... } + +>>> formset = BetterAuthorFormSet(data) +>>> formset.is_valid() +True +>>> formset.save() +[] # Inline Formsets ############################################################ |
