Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #92 -- meta.Admin 'fields' parameter is now optional. If it's n…

…ot 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
  • Loading branch information...
commit c21f6ecee24c6587bb8ddddc878aad3fd29b40a7 1 parent 304b08e
@adrianholovaty adrianholovaty authored
View
15 django/core/meta.py
@@ -2136,7 +2136,7 @@ def __init__(self, to, name, field_name, num_in_admin=0, edit_inline=False,
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 @@ def __init__(self, fields, js=None, list_display=None, list_filter=None, date_hi
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 = []
View
3  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',),
)
View
3  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'),
View
11 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
View
10 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
View
23 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'),
)
Please sign in to comment.
Something went wrong with that request. Please try again.