summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorJoseph Kocherhans <joseph@jkocherhans.com>2010-01-21 01:40:21 +0000
committerJoseph Kocherhans <joseph@jkocherhans.com>2010-01-21 01:40:21 +0000
commit856a39e841080abc34e8ae3bb2b20f780c33762d (patch)
tree7088b4de5deaea14d201a1f43e3eca6cacfb8a26 /django
parent63c5e6621aac1cdf4d02d0b99266251cd1643c26 (diff)
Fixed #12577. Reverted some changes from [12098] since [12206] made them unneccessary. Also, added a test for using generic inlines with unique_together. Thanks for the report, Raffaele Salmaso.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12268 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/contrib/contenttypes/generic.py24
1 files changed, 8 insertions, 16 deletions
diff --git a/django/contrib/contenttypes/generic.py b/django/contrib/contenttypes/generic.py
index 0d542a4a4e..2a9f4d3ac6 100644
--- a/django/contrib/contenttypes/generic.py
+++ b/django/contrib/contenttypes/generic.py
@@ -297,11 +297,7 @@ class BaseGenericInlineFormSet(BaseModelFormSet):
# Avoid a circular import.
from django.contrib.contenttypes.models import ContentType
opts = self.model._meta
- if instance is None:
- self.instance = self.model()
- else:
- self.instance = instance
- self.save_as_new = save_as_new
+ self.instance = instance
self.rel_name = '-'.join((
opts.app_label, opts.object_name.lower(),
self.ct_field.name, self.ct_fk_field.name,
@@ -328,19 +324,15 @@ class BaseGenericInlineFormSet(BaseModelFormSet):
))
get_default_prefix = classmethod(get_default_prefix)
- def _construct_form(self, i, **kwargs):
+ def save_new(self, form, commit=True):
# Avoid a circular import.
from django.contrib.contenttypes.models import ContentType
- form = super(BaseGenericInlineFormSet, self)._construct_form(i, **kwargs)
- if self.save_as_new:
- # Remove the key from the form's data, we are only creating new instances.
- form.data[form.add_prefix(self.ct_fk_field.name)] = None
- form.data[form.add_prefix(self.ct_field.name)] = None
-
- # Set the GenericForeignKey value here so that the form can do its validation.
- setattr(form.instance, self.ct_fk_field.attname, self.instance.pk)
- setattr(form.instance, self.ct_field.attname, ContentType.objects.get_for_model(self.instance).pk)
- return form
+ kwargs = {
+ self.ct_field.get_attname(): ContentType.objects.get_for_model(self.instance).pk,
+ self.ct_fk_field.get_attname(): self.instance.pk,
+ }
+ new_obj = self.model(**kwargs)
+ return save_instance(form, new_obj, commit=commit)
def generic_inlineformset_factory(model, form=ModelForm,
formset=BaseGenericInlineFormSet,