summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/core/meta.py15
-rw-r--r--django/models/auth.py3
-rw-r--r--django/models/core.py3
-rw-r--r--docs/model-api.txt11
-rw-r--r--docs/overview.txt10
-rw-r--r--docs/tutorial02.txt23
6 files changed, 24 insertions, 41 deletions
diff --git a/django/core/meta.py b/django/core/meta.py
index 189114219d..5c8d070f40 100644
--- a/django/core/meta.py
+++ b/django/core/meta.py
@@ -2136,7 +2136,7 @@ class OneToOne(ManyToOne):
self.raw_id_admin = raw_id_admin
class Admin:
- def __init__(self, fields, js=None, list_display=None, list_filter=None, date_hierarchy=None,
+ def __init__(self, fields=None, js=None, list_display=None, list_filter=None, date_hierarchy=None,
save_as=False, ordering=None, search_fields=None, save_on_top=False):
self.fields = fields
self.js = js or []
@@ -2148,10 +2148,17 @@ class Admin:
self.save_on_top = save_on_top
def get_field_objs(self, opts):
- # Returns self.fields, except with fields as Field objects instead of
- # field names.
+ """
+ Returns self.fields, except with fields as Field objects instead of
+ field names. If self.fields is None, defaults to putting every
+ non-AutoField field with editable=True in a single fieldset.
+ """
+ if self.fields is None:
+ field_struct = ((None, {'fields': [f.name for f in opts.fields + opts.many_to_many if f.editable and not isinstance(f, AutoField)]}),)
+ else:
+ field_struct = self.fields
new_fieldset_list = []
- for fieldset in self.fields:
+ for fieldset in field_struct:
new_fieldset = [fieldset[0], {}]
new_fieldset[1].update(fieldset[1])
admin_fields = []
diff --git a/django/models/auth.py b/django/models/auth.py
index 4d3f6394a1..516ec112df 100644
--- a/django/models/auth.py
+++ b/django/models/auth.py
@@ -20,9 +20,6 @@ class Group(meta.Model):
)
ordering = (('name', 'ASC'),)
admin = meta.Admin(
- fields = (
- (None, {'fields': ('name', 'permissions')}),
- ),
search_fields = ('name',),
)
diff --git a/django/models/core.py b/django/models/core.py
index 4416f22b76..bdf4567e6a 100644
--- a/django/models/core.py
+++ b/django/models/core.py
@@ -65,9 +65,6 @@ class Redirect(meta.Model):
unique_together=(('site_id', 'old_path'),)
ordering = (('old_path', 'ASC'),)
admin = meta.Admin(
- fields = (
- (None, {'fields': ('site_id', 'old_path', 'new_path')}),
- ),
list_display = ('__repr__',),
list_filter = ('site_id',),
search_fields = ('old_path', 'new_path'),
diff --git a/docs/model-api.txt b/docs/model-api.txt
index e52ca8b43d..a2cfade854 100644
--- a/docs/model-api.txt
+++ b/docs/model-api.txt
@@ -304,9 +304,9 @@ Field Types
many toppings on a pizza)::
meta.ForeignKey(Pizza)
-
+
.. admonition:: Note
-
+
To create a recursive relationship, use a ``ForeignKey`` that relates
to ``"self"`` (i.e. ``meta.ForeignKey("self")``).
@@ -568,7 +568,7 @@ Admin options
The ``admin`` field in the model tells Django how to construct the admin
interface for the object. The field is an instance of the ``meta.Admin``
-object, which has the following options (of which only ``fields`` is required):
+object, which has the following options. All are optional.
``date_hierarchy``
To allow filtering of objects in the admin by date, set ``date_hierarchy``
@@ -616,6 +616,11 @@ object, which has the following options (of which only ``fields`` is required):
.. image:: http://media.djangoproject.com/img/doc/flatfiles_admin.png
+ If ``fields`` isn't given but a model does define ``admin`` as a
+ ``meta.Admin`` object, Django will default to displaying each field that
+ isn't an ``AutoField`` and has ``editable=True``, in a single fieldset, in
+ the same order as the ``fields`` in the model.
+
``js``
A list of strings representing URLs of JavaScript files to link into the
admin screen. This can be used to tweak a given type of admin page in JS or
diff --git a/docs/overview.txt b/docs/overview.txt
index 1453b70964..86f089778d 100644
--- a/docs/overview.txt
+++ b/docs/overview.txt
@@ -138,15 +138,7 @@ classes::
meta.TextField('article'),
meta.ForeignKey(Reporter),
)
- admin = meta.Admin(
- fields = (
- (None, {'fields': ('headline', 'article')}),
- ('Extra stuff', {'fields': ('pub_date', 'reporter_id')}),
- ),
- )
-
-The ``admin.fields`` defines the layout of your admin form. Each element in the
-fields tuple corresponds to a ``<fieldset>`` in the form.
+ admin = meta.Admin()
The philosophy here is that your site is edited by a staff, or a client, or
maybe just you -- and you don't want to have to deal with creating backend
diff --git a/docs/tutorial02.txt b/docs/tutorial02.txt
index 0c96c5c12d..7c03c71c1f 100644
--- a/docs/tutorial02.txt
+++ b/docs/tutorial02.txt
@@ -92,11 +92,7 @@ file and make the following change to add an ``admin`` attribute::
fields = (
# ...
)
- admin = meta.Admin(
- fields = (
- (None, {'fields': ('question', 'pub_date')}),
- ),
- )
+ admin = meta.Admin()
Restart your development Web server, and reload the Django admin page. You'll
have to restart the server each time you make a change to Python code -- but
@@ -163,8 +159,8 @@ Customize the admin form
Take a few minutes to marvel at all the code you didn't have to write.
-Let's customize this a bit. We can reorder the fields by changing the
-order of the field names in the ``admin`` attribute of the model::
+Let's customize this a bit. We can reorder the fields by explicitly adding a
+``fields`` parameter to ``meta.Admin``::
admin = meta.Admin(
fields = (
@@ -226,15 +222,7 @@ Here's what that would look like::
class Choice(meta.Model):
# ...
- admin = meta.Admin(
- fields = (
- (None, {'fields': ('poll_id', 'choice', 'votes')}),
- ),
- )
-
-(Note that we used "poll_id" to refer to the ``ForeignKey(Poll)`` field. The
-field name is automatically calculated from the model's class name, lowercased,
-plus '_id'.)
+ admin = meta.Admin()
Now "Choices" is an available option in the Django admin. The "Add choice" form
looks like this:
@@ -318,9 +306,6 @@ on the change list page for the object::
class Poll(meta.Model):
# ...
admin = meta.Admin(
- fields = (
- (None, {'fields': ('question', 'pub_date')}),
- ),
list_display = ('question', 'pub_date'),
)