#33258: inconsistent use of () and [] for attributes in Admin class - Also class
variables
--------------------------------+--------------------------------------
Reporter: newearthmartin | Owner: nobody
Type: Bug | Status: new
Component: contrib.admin | Version: 3.2
Severity: Normal | Resolution:
Keywords: Admin | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------+--------------------------------------
Description changed by newearthmartin:
Old description:
> In Django's Admin class, most "lists" are initialized as tuples `()`
> while two of them (`inlines` and `actions`)are initialized as lists `[]`
>
> `
> list_display = ('__str__',)
> list_display_links = ()
> list_filter = ()
> ...
> list_editable = ()
> search_fields = ()
> ...
> inlines = []
> ...
> actions = []
> `
>
> This is inconsistent.
>
> And also there is a Since these are declared in the class, they are
> shared among all instances if this value is not set.
>
> I wanted to add an action to an admin subclass so I did
> `MyAdmin.actions.append('some_action')` which added this action to all my
> admins who had not set a new value to `actions`. While lists are more
> semantically correct than tuples, tuples have the advantage of being
> immutable, so they force users to reset the value every time.
>
> So, two solutions:
>
> - declare all these attributes as instance variables in the constructor.
> Possibly setting them all as lists
> - declare all these attributes as tuples, keeping them where they are
New description:
In Django's Admin class, most "lists" are initialized as tuples `()` while
two of them (`inlines` and `actions`)are initialized as lists `[]`
{{{
list_display = ('__str__',)
list_display_links = ()
list_filter = ()
...
list_editable = ()
search_fields = ()
...
inlines = []
...
actions = []
}}}
This is inconsistent.
And also since these are declared in the class, they are shared among all
instances if this value is not set. This brings the problem where you
inadvertedly add a value to a list and this gets added to all Admin
instances where this attribute has not been set.
ie: I wanted to add an action to an admin subclass so I did
`MyAdmin.actions.append('some_action')` which added this action to all my
admins who had not set a new value to `actions`.
While lists are more semantically correct than tuples, tuples have the
advantage of being immutable, so they force users to reset the value every
time.
So, two solutions:
- declare all these attributes as instance variables in the constructor.
Possibly setting them all as lists
- declare all these attributes as tuples, keeping them where they are
--
--
Ticket URL: <https://code.djangoproject.com/ticket/33258#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/072.1d5f720545eeb1dec1d09ffd44973410%40djangoproject.com.