Code

Opened 6 years ago

Last modified 8 months ago

#7497 new New feature

AppAdmin class for customizing app listing in admin index

Reported by: mrts Owned by: nobody
Component: contrib.admin Version: master
Severity: Normal Keywords:
Cc: bartTC, ega641@…, jezdez, andy@…, sam.kuper@…, sehmaschine@…, bendavis78, rh0dium, sebastian.goll@… Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

See http://code.djangoproject.com/wiki/DjangoSpecifications/NfAdmin/FlexibleAppHandling for details.

This supplements the app directive.

As discussed with brosner and jkocherhans in #django-dev:

<brosner> it looks reasonable, but haven't spent much time thinking about it
<jkocherhans> mrts: I think this is clearly backwards incompatible with the current nfa api and has to go in pre 1.0 if it goes in at all
<jkocherhans> I'm a big -1 on the order attribute and -0 on models (maybe just a different syntax), but the other stuff seems reasonable
<mrts> jkocherhans: what's wrong with ordering?
<jkocherhans> it just feels like the wrong place to specify it
<jkocherhans> it's a global issue, and an issue any particular app should handle
<mrts> my use case: I have a lot of functionality exposed to somewhat dumb users
<mrts> and they have trouble finding the right bits in the admin interface
 ordering is only used in context of admin index
 I would like to put the important apps to top and collapse the rest
<jkocherhans> exactly. what should 3rd party apps put there? therein lies my objection.
<mrts> well, I'd say decouple admin from models (as nfa already does) and don't specify any admin options at all -- users are free to customize things with AppAdmin
<jkocherhans> I guess not if using a AppAdmin class is optional. I was originally thinking it would replace model registration with an admin site.
<mrts> jkocherhans: yeah, that's what I kinda meant... it looks more coherent this way
 jkocherhans: and it may solve some of the issues register() currently has
<jkocherhans> mrts: I'm gonna have to let it sit for awhile. I'm trying to think of what else an AdminApp class would do besides being a coathanger for a few attributes, nothing is coming to mind.
<mrts> jkocherhans: but jezdez has a point -- it would also provide easy bridging for app instances

Example syntax follows.

class BarModelAdmin(admin.ModelAdmin):
   description = 'A bar is a bar is a bar'
   ...

class FooAppAdmin(admin.AppAdmin):
    app = settings.INSTALLED_APPS[0]
    name = "Foo" # overrides app().name
    description = "An application that does foo"
    style = {'classes' : ('collapse',)}
    order = 1
    models = ( # model order in this list determines their display order in app block
      (BarModel, BarModelAdmin),
      (BazModel, None), # use default ModelAdmin, don't show description
   )

admin.site.register(FooAppAdmin) # no need for the tedious for model in [A, B, C, D]: admin.site.register(model)

Attachments (0)

Change History (20)

comment:1 Changed 6 years ago by jacob

  • milestone changed from 1.0 to post-1.0
  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Triage Stage changed from Unreviewed to Someday/Maybe

comment:2 Changed 6 years ago by mrts

app = settings.INSTALLED_APPS[0] is actually useless in the example.

comment:3 Changed 6 years ago by bartTC

  • Cc bartTC added

comment:4 Changed 6 years ago by sorl

Can't we just add a label attribute to the ModelAdmin class? ModelAdmin classes with same label would group, possibly also position attribute.

comment:5 Changed 6 years ago by sorl

Im just thinking that the application grouping might not have much to do with how an administrator uses the admin tool.

comment:6 Changed 6 years ago by anonymous

  • Cc ega641@… added

comment:7 Changed 6 years ago by sorl

What do you think of something like an optional layout?:

admin.site.layout = (
    (_("don't touch this stuff"), {
        'models': ('',
            'django.contrib.sites.models.Site',
        )
    }),
    (_('users & groups'), {
        'models': ('django.contrib.auth.models',
            'User', 'Group'
        )
    }),
    (_('pages & news'), {
        'models': ('',
            'example_project.pages.models.Page',
            'example_project.news.models.News',
        )
    }),
)

Also adding a description attribute to ModelAdmin.
You can see and read further on this idea and look at the implementation in my project sorl-curator

comment:8 Changed 6 years ago by jezdez

  • Cc jezdez added

comment:9 Changed 6 years ago by andybak

  • Cc andy@… added

comment:10 Changed 5 years ago by anonymous

  • milestone post-1.0 deleted

Milestone post-1.0 deleted

comment:11 Changed 5 years ago by phaesler

A somewhat related point - if you have two applications with the same basename in the one project, the admin application displays them as if they were merged into a single application with that name.

E.g. If 'foo.bar.myapp' and 'spam.eggs.myapp' are both in the INSTALLED_APPS list, and both have an admin.py; then admin displays them both as a single merged 'myapp' application.

comment:12 Changed 5 years ago by russellm

#11895 proposed a similar idea, and provided a patch (which could also be implemented using subclassing).

comment:13 Changed 5 years ago by sampablokuper

  • Cc sam.kuper@… added

Added CC.

comment:14 Changed 4 years ago by anonymous

  • Cc sehmaschine@… added

comment:15 Changed 3 years ago by lukeplant

  • Severity set to Normal
  • Type set to New feature

comment:16 Changed 3 years ago by bendavis78

  • Cc bendavis78 added
  • Easy pickings unset
  • UI/UX unset

comment:17 Changed 3 years ago by rh0dium

  • Cc rh0dium added

comment:18 Changed 3 years ago by sebastian

  • Cc sebastian.goll@… added

comment:19 Changed 19 months ago by aaugustin

  • Resolution set to duplicate
  • Status changed from new to closed
  • Triage Stage changed from Someday/Maybe to Accepted

This is #3591 — also known as the 'app-loading' branch.

comment:20 Changed 8 months ago by aaugustin

  • Resolution duplicate deleted
  • Status changed from closed to new

Mmm, in fact this was specifically split from app-loading. Sorry.

Add Comment

Modify Ticket

Change Properties
<Author field>
Action
as new
The owner will be changed from nobody to anonymous. Next status will be 'assigned'
as The resolution will be set. Next status will be 'closed'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.