#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 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 -- -- Ticket URL: <https://code.djangoproject.com/ticket/33258#comment:1> 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 django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/072.578638ddad0a51e00704666b91f130cc%40djangoproject.com.