mirror of
https://github.com/django/django.git
synced 2025-11-24 12:51:44 +00:00
Fixed #12508 - Added ability to dynamically add inlines in the admin app.
Refs #13. Also introduces an ``empty_form`` attribute on formsets to make it easier to implement dynamic forms. Many thanks to Zain Memon for the initial patch from his Summer of Code 2009 project, Stanislaus Madueke for his django-dynamic-formset app and all the other people helping out. git-svn-id: http://code.djangoproject.com/svn/django/trunk@12297 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
df82175c17
commit
c14937cf7a
19 changed files with 6505 additions and 38 deletions
|
|
@ -119,6 +119,21 @@ class BaseFormSet(StrAndUnicode):
|
|||
return self.forms[self.initial_form_count():]
|
||||
extra_forms = property(_get_extra_forms)
|
||||
|
||||
def _get_empty_form(self, **kwargs):
|
||||
defaults = {
|
||||
'auto_id': self.auto_id,
|
||||
'prefix': self.add_prefix('__prefix__'),
|
||||
'empty_permitted': True,
|
||||
}
|
||||
if self.data or self.files:
|
||||
defaults['data'] = self.data
|
||||
defaults['files'] = self.files
|
||||
defaults.update(kwargs)
|
||||
form = self.form(**defaults)
|
||||
self.add_fields(form, None)
|
||||
return form
|
||||
empty_form = property(_get_empty_form)
|
||||
|
||||
# Maybe this should just go away?
|
||||
def _get_cleaned_data(self):
|
||||
"""
|
||||
|
|
@ -268,7 +283,7 @@ class BaseFormSet(StrAndUnicode):
|
|||
"""A hook for adding extra fields on to each form instance."""
|
||||
if self.can_order:
|
||||
# Only pre-fill the ordering field for initial forms.
|
||||
if index < self.initial_form_count():
|
||||
if index is not None and index < self.initial_form_count():
|
||||
form.fields[ORDERING_FIELD_NAME] = IntegerField(label=_(u'Order'), initial=index+1, required=False)
|
||||
else:
|
||||
form.fields[ORDERING_FIELD_NAME] = IntegerField(label=_(u'Order'), required=False)
|
||||
|
|
|
|||
|
|
@ -620,7 +620,10 @@ class BaseModelFormSet(BaseFormSet):
|
|||
pk_value = form.instance.pk
|
||||
else:
|
||||
try:
|
||||
pk_value = self.get_queryset()[index].pk
|
||||
if index is not None:
|
||||
pk_value = self.get_queryset()[index].pk
|
||||
else:
|
||||
pk_value = None
|
||||
except IndexError:
|
||||
pk_value = None
|
||||
if isinstance(pk, OneToOneField) or isinstance(pk, ForeignKey):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue