Fixed #92 -- meta.Admin 'fields' parameter is now optional. If it's not given, Django will use all editable fields by default. This cuts down on redundancy. Also updated relevant docs to reflect the change.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@265 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2005-07-21 03:46:16 +00:00
parent 304b08e325
commit c21f6ecee2
6 changed files with 24 additions and 41 deletions

View File

@ -2136,7 +2136,7 @@ class OneToOne(ManyToOne):
self.raw_id_admin = raw_id_admin self.raw_id_admin = raw_id_admin
class 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): save_as=False, ordering=None, search_fields=None, save_on_top=False):
self.fields = fields self.fields = fields
self.js = js or [] self.js = js or []
@ -2148,10 +2148,17 @@ class Admin:
self.save_on_top = save_on_top self.save_on_top = save_on_top
def get_field_objs(self, opts): 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 = [] new_fieldset_list = []
for fieldset in self.fields: for fieldset in field_struct:
new_fieldset = [fieldset[0], {}] new_fieldset = [fieldset[0], {}]
new_fieldset[1].update(fieldset[1]) new_fieldset[1].update(fieldset[1])
admin_fields = [] admin_fields = []

View File

@ -20,9 +20,6 @@ class Group(meta.Model):
) )
ordering = (('name', 'ASC'),) ordering = (('name', 'ASC'),)
admin = meta.Admin( admin = meta.Admin(
fields = (
(None, {'fields': ('name', 'permissions')}),
),
search_fields = ('name',), search_fields = ('name',),
) )

View File

@ -65,9 +65,6 @@ class Redirect(meta.Model):
unique_together=(('site_id', 'old_path'),) unique_together=(('site_id', 'old_path'),)
ordering = (('old_path', 'ASC'),) ordering = (('old_path', 'ASC'),)
admin = meta.Admin( admin = meta.Admin(
fields = (
(None, {'fields': ('site_id', 'old_path', 'new_path')}),
),
list_display = ('__repr__',), list_display = ('__repr__',),
list_filter = ('site_id',), list_filter = ('site_id',),
search_fields = ('old_path', 'new_path'), search_fields = ('old_path', 'new_path'),

View File

@ -568,7 +568,7 @@ Admin options
The ``admin`` field in the model tells Django how to construct the admin 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`` 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`` ``date_hierarchy``
To allow filtering of objects in the admin by date, set ``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 .. 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`` ``js``
A list of strings representing URLs of JavaScript files to link into the 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 admin screen. This can be used to tweak a given type of admin page in JS or

View File

@ -138,15 +138,7 @@ classes::
meta.TextField('article'), meta.TextField('article'),
meta.ForeignKey(Reporter), meta.ForeignKey(Reporter),
) )
admin = meta.Admin( 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.
The philosophy here is that your site is edited by a staff, or a client, or 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 maybe just you -- and you don't want to have to deal with creating backend

View File

@ -92,11 +92,7 @@ file and make the following change to add an ``admin`` attribute::
fields = ( fields = (
# ... # ...
) )
admin = meta.Admin( admin = meta.Admin()
fields = (
(None, {'fields': ('question', 'pub_date')}),
),
)
Restart your development Web server, and reload the Django admin page. You'll 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 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. 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 Let's customize this a bit. We can reorder the fields by explicitly adding a
order of the field names in the ``admin`` attribute of the model:: ``fields`` parameter to ``meta.Admin``::
admin = meta.Admin( admin = meta.Admin(
fields = ( fields = (
@ -226,15 +222,7 @@ Here's what that would look like::
class Choice(meta.Model): class Choice(meta.Model):
# ... # ...
admin = meta.Admin( 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'.)
Now "Choices" is an available option in the Django admin. The "Add choice" form Now "Choices" is an available option in the Django admin. The "Add choice" form
looks like this: looks like this:
@ -318,9 +306,6 @@ on the change list page for the object::
class Poll(meta.Model): class Poll(meta.Model):
# ... # ...
admin = meta.Admin( admin = meta.Admin(
fields = (
(None, {'fields': ('question', 'pub_date')}),
),
list_display = ('question', 'pub_date'), list_display = ('question', 'pub_date'),
) )