mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
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
This commit is contained in:
@@ -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 ############################################################
|
||||
|
||||
|
||||
Reference in New Issue
Block a user