Author: ramiro
Date: 2011-06-16 12:56:22 -0700 (Thu, 16 Jun 2011)
New Revision: 16422
Modified:
django/trunk/django/contrib/admin/options.py
django/trunk/tests/regressiontests/modeladmin/tests.py
Log:
Fixed #8999 -- Removed useless code in handling of `exclude` option in
ModelAdmin and InlineModelAdmin custom form(set) hooks. Thanks goes to seanl
for the report, patch and bkonkle and Julien for further work on final patch.
Modified: django/trunk/django/contrib/admin/options.py
===================================================================
--- django/trunk/django/contrib/admin/options.py 2011-06-16 16:42:54 UTC
(rev 16421)
+++ django/trunk/django/contrib/admin/options.py 2011-06-16 19:56:22 UTC
(rev 16422)
@@ -433,7 +433,6 @@
exclude = []
else:
exclude = list(self.exclude)
- exclude.extend(kwargs.get("exclude", []))
exclude.extend(self.get_readonly_fields(request, obj))
# if exclude is an empty list we pass None to be consistant with the
# default on modelform_factory
@@ -1342,7 +1341,6 @@
exclude = []
else:
exclude = list(self.exclude)
- exclude.extend(kwargs.get("exclude", []))
exclude.extend(self.get_readonly_fields(request, obj))
# if exclude is an empty list we use None, since that's the actual
# default
Modified: django/trunk/tests/regressiontests/modeladmin/tests.py
===================================================================
--- django/trunk/tests/regressiontests/modeladmin/tests.py 2011-06-16
16:42:54 UTC (rev 16421)
+++ django/trunk/tests/regressiontests/modeladmin/tests.py 2011-06-16
19:56:22 UTC (rev 16422)
@@ -141,6 +141,63 @@
type(ma.get_form(request).base_fields['sign_date'].widget),
AdminDateWidget)
+ def test_form_exclude_kwarg_override(self):
+ """
+ Ensure that the `exclude` kwarg passed to `ModelAdmin.get_form()`
+ overrides all other declarations. Refs #8999.
+ """
+
+ class AdminBandForm(forms.ModelForm):
+
+ class Meta:
+ model = Band
+ exclude = ['name']
+
+ class BandAdmin(ModelAdmin):
+ exclude = ['sign_date',]
+ form = AdminBandForm
+
+ def get_form(self, request, obj=None, **kwargs):
+ kwargs['exclude'] = ['bio']
+ return super(BandAdmin, self).get_form(request, obj, **kwargs)
+
+ ma = BandAdmin(Band, self.site)
+ self.assertEqual(ma.get_form(request).base_fields.keys(),
+ ['name', 'sign_date',])
+
+
+ def test_formset_exclude_kwarg_override(self):
+ """
+ Ensure that the `exclude` kwarg passed to
`InlineModelAdmin.get_formset()`
+ overrides all other declarations. Refs #8999.
+ """
+
+ class AdminConcertForm(forms.ModelForm):
+
+ class Meta:
+ model = Concert
+ exclude = ['day']
+
+ class ConcertInline(TabularInline):
+ exclude = ['transport']
+ form = AdminConcertForm
+ fk_name = 'main_band'
+ model = Concert
+
+ def get_formset(self, request, obj=None, **kwargs):
+ kwargs['exclude'] = ['opening_band']
+ return super(ConcertInline, self).get_formset(request, obj,
**kwargs)
+
+ class BandAdmin(ModelAdmin):
+ inlines = [
+ ConcertInline
+ ]
+
+ ma = BandAdmin(Band, self.site)
+ self.assertEqual(
+ list(ma.get_formsets(request))[0]().forms[0].fields.keys(),
+ ['main_band', 'day', 'transport', 'id', 'DELETE',])
+
def test_queryset_override(self):
# If we need to override the queryset of a ModelChoiceField in our
custom form
# make sure that RelatedFieldWidgetWrapper doesn't mess that up.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.