Author: brosner
Date: 2008-09-02 12:26:24 -0500 (Tue, 02 Sep 2008)
New Revision: 8861
Modified:
django/trunk/django/contrib/admin/options.py
django/trunk/docs/ref/contrib/admin.txt
django/trunk/tests/modeltests/model_formsets/models.py
django/trunk/tests/regressiontests/modeladmin/models.py
Log:
Fixed #7973 -- Added exclude to BaseModelAdmin to make everything consistent
with the form/formset factories. Refs #8071 to make it easier to get at
exclude. Thanks julien for the patch.
Modified: django/trunk/django/contrib/admin/options.py
===================================================================
--- django/trunk/django/contrib/admin/options.py 2008-09-02 17:13:39 UTC
(rev 8860)
+++ django/trunk/django/contrib/admin/options.py 2008-09-02 17:26:24 UTC
(rev 8861)
@@ -31,6 +31,7 @@
"""Functionality common to both ModelAdmin and InlineAdmin."""
raw_id_fields = ()
fields = None
+ exclude = None
fieldsets = None
form = forms.ModelForm
filter_vertical = ()
@@ -262,9 +263,14 @@
fields = flatten_fieldsets(self.declared_fieldsets)
else:
fields = None
+ if self.exclude is None:
+ exclude = []
+ else:
+ exclude = self.exclude
defaults = {
"form": self.form,
"fields": fields,
+ "exclude": exclude + kwargs.get("exclude", []),
"formfield_callback": self.formfield_for_dbfield,
}
defaults.update(kwargs)
@@ -780,11 +786,16 @@
fields = flatten_fieldsets(self.declared_fieldsets)
else:
fields = None
+ if self.exclude is None:
+ exclude = []
+ else:
+ exclude = self.exclude
defaults = {
"form": self.form,
"formset": self.formset,
"fk_name": self.fk_name,
"fields": fields,
+ "exclude": exclude + kwargs.get("exclude", []),
"formfield_callback": self.formfield_for_dbfield,
"extra": self.extra,
"max_num": self.max_num,
Modified: django/trunk/docs/ref/contrib/admin.txt
===================================================================
--- django/trunk/docs/ref/contrib/admin.txt 2008-09-02 17:13:39 UTC (rev
8860)
+++ django/trunk/docs/ref/contrib/admin.txt 2008-09-02 17:26:24 UTC (rev
8861)
@@ -181,6 +181,32 @@
dictionary key that is within the ``fieldsets`` option, as described in
the previous section.
+``exclude``
+~~~~~~~~~~~
+
+This attribute, if given, should be a list of field names to exclude from the
+form.
+
+For example, let's consider the following model::
+
+ class Author(models.Model):
+ name = models.CharField(max_length=100)
+ title = models.CharField(max_length=3)
+ birth_date = models.DateField(blank=True, null=True)
+
+If you want a form for the ``Author`` model that includes only the ``name``
+and ``title`` fields, you would specify ``fields`` or ``exclude`` like this::
+
+ class AuthorAdmin(admin.ModelAdmin):
+ fields = ('name', 'title')
+
+ class AuthorAdmin(admin.ModelAdmin):
+ exclude = ('birth_date',)
+
+Since the Author model only has three fields, ``name``, ``title``, and
+``birth_date``, the forms resulting from the above declarations will contain
+exactly the same fields.
+
``filter_horizontal``
~~~~~~~~~~~~~~~~~~~~~
Modified: django/trunk/tests/modeltests/model_formsets/models.py
===================================================================
--- django/trunk/tests/modeltests/model_formsets/models.py 2008-09-02
17:13:39 UTC (rev 8860)
+++ django/trunk/tests/modeltests/model_formsets/models.py 2008-09-02
17:26:24 UTC (rev 8861)
@@ -701,5 +701,4 @@
>>> formset.is_valid()
True
-
"""}
Modified: django/trunk/tests/regressiontests/modeladmin/models.py
===================================================================
--- django/trunk/tests/regressiontests/modeladmin/models.py 2008-09-02
17:13:39 UTC (rev 8860)
+++ django/trunk/tests/regressiontests/modeladmin/models.py 2008-09-02
17:26:24 UTC (rev 8861)
@@ -116,6 +116,23 @@
['name']
+# Using `exclude`.
+
+>>> class BandAdmin(ModelAdmin):
+... exclude = ['bio']
+>>> ma = BandAdmin(Band, site)
+>>> ma.get_form(request).base_fields.keys()
+['name', 'sign_date']
+
+# Using `fields` and `exclude`.
+
+>>> class BandAdmin(ModelAdmin):
+... fields = ['name', 'bio']
+... exclude = ['bio']
+>>> ma = BandAdmin(Band, site)
+>>> ma.get_form(request).base_fields.keys()
+['name']
+
If we specify a form, it should use it allowing custom validation to work
properly. This won't, however, break any of the admin widgets or media.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---