Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Customizing the Django Admin: The how ad the why by Lakshman Prasad

Customizing the Django Admin: The how ad the why by Lakshman Prasad

PyCon 2013

March 16, 2013
Tweet

More Decks by PyCon 2013

Other Decks in Technology

Transcript

  1. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Customizing the Django Admin:
    The How and the Why.
    Lakshman Prasad
    (twitter.com/becomingGuru)

    View Slide

  2. ”one of the most powerful parts of Django”

    View Slide

  3. 2008: Large percentage of people came to django because of admin.

    View Slide

  4. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    ”Nothing on the web from five years ago is still
    awesome by today’s standards. Nothing.”
    – Jeff Croft

    View Slide

  5. No proper padding

    View Slide

  6. Not to use for external applications

    View Slide

  7. Hard to customize

    View Slide

  8. Not as good UX

    View Slide

  9. Doesn’t get enough love

    View Slide

  10. View Slide

  11. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Admin Issues
    Setting Perspective
    Overview
    Customizations
    External apps
    Admin Next

    View Slide

  12. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Software span a spectrum

    View Slide

  13. Those that unroll the loops for speed (at runtime!)

    View Slide

  14. ... those that solve a complex human problem

    View Slide

  15. Frameworks come in between ...

    View Slide

  16. Admin is an idea that..

    View Slide

  17. ...achieves balance at higher abstraction

    View Slide

  18. ... and helps reduce cost of maintainance and development

    View Slide

  19. ... Web Applications themselves can be abstracted; not just code.

    View Slide

  20. ... CRUD can be done better than by scaffolding.

    View Slide

  21. ... Developers dont like to do UI.

    View Slide

  22. ... UI interfaces can be standardised.

    View Slide

  23. ... You can create an application by specification, with standard UI

    View Slide

  24. ... Software development skillset is independent of UI development.

    View Slide

  25. ... When you look with that perspective, shortcomings aren’t.

    View Slide

  26. ... Always been much more popular outside of the US

    View Slide

  27. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Import the model, override model admin, specify fields
    from . models import TransferEarnings
    from . forms import TransferEarningsForm
    from django . admin import ModelAdmin
    class TransferEarningsAdmin ( ModelAdmin ) :
    l i s t p e r p a g e = 15
    s e a r c h f i e l d s = [ ’ u s e r l o g i n i d ’ ]
    l i s t d i s p l a y = ( ’ user ’ , ’ date ’ , ’ amount ’ , ’ t r a n s f e r t o ’
    f i e l d s = ( ’ user ’ , ’ amount ’ , ’ date ’ , ’ t r a n s f e r t o ’ )
    readonly = ( ’ user ’ , ’ amount ’ , ’ t r a n s f e r t o ’ , ’ date ’ )
    form = TransferEarningsForm
    l i s t f i l t e r = [ ’ s t a t e ’ ]

    View Slide

  28. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Auto discover the admin modules
    # u r l s . py
    from django . conf . u r l s import patterns , url , i n c l u d e
    from django . c o n t r i b import admin
    admin . a u t o d i s c o v e r ()
    u r l p a t t e r n s = p a t t e r n s ( ’ ’ ,
    ( r ’ ˆadmin/ ’ , i n c l u d e ( admin . s i t e . u r l s )) ,
    )

    View Slide

  29. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    list filter enables filtering, Actions enable actions on models

    View Slide

  30. Custom Media can be added

    View Slide

  31. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Customizations

    View Slide

  32. Provide values for the attributes defined in BaseModelAdmin.

    View Slide

  33. ... And those defined in ModelAdmin

    View Slide

  34. So for AdminSite... all of these are documented pretty well

    View Slide

  35. Most things can be done dynamically. Per request.

    View Slide

  36. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Custom class list filters
    c l a s s AdvancedDecadeBornListFilter ( django . c o n t r i b . admin . S i m p l e L i s t F i l t e r ) :
    def lookups ( s e l f , request , model admin ) :
    ”””
    Only show the lookups i f t h e r e a c t u a l l y i s
    anyone born i n the c o r r e s p o n d i n g decades .
    ”””
    qs = model admin . q u e r y s e t ( r e q u e s t )
    i f qs . f i l t e r ( b i r t h d a y g t e=date (1980 , 1 , 1) ,
    b i r t h d a y l t e=date (1989 , 12 , 3 1 ) ) . e x i s t s ( ) :
    y i e l d ( ’ 80 s ’ , ( ’ i n the e i g h t i e s ’ ))
    i f qs . f i l t e r ( b i r t h d a y g t e=date (1990 , 1 , 1) ,
    b i r t h d a y l t e=date (1999 , 12 , 3 1 ) ) . e x i s t s ( ) :
    y i e l d ( ’ 90 s ’ , ( ’ i n the n i n e t i e s ’ ))
    def q u e r y s e t ( s e l f , request , q u e r y s e t ) :

    View Slide

  37. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Custom admin actions
    class ArticleAdmin ( admin . ModelAdmin ) :
    . . .
    a c t i o n s = [ ’ make published ’ ]
    def make published ( s e l f , request , queryset ) :
    queryset . update ( s t a t u s=’p ’ )
    make published . s h o r t d e s c r i p t i o n = \
    ”Mark s e l e c t e d s t o r i e s as p u b l i s h e d ”

    View Slide

  38. Extend the ModelAdmin and inject context variables

    View Slide

  39. Templates are in contrib/admin/templates/admin/

    View Slide

  40. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Can be overriden per app/model in
    templates/admin/myapp/
    app index . html
    change form . html
    c h a n g e l i s t . html
    d e l e t e c o n f i r m a t i o n . html
    o b j e c t h i s t o r y . html

    View Slide

  41. Override template at runtime

    View Slide

  42. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    templates/admin/myapp/changeform.html
    {% extends ”admin/ change form . html ” %}
    {% load i18n %}
    {% block object−t o o l s %}
    {% i f change %}{% i f not is popup %}


    {% t r a n s ” H i s t o r y ” %}


    My Link

    {% i f h a s a b s o l u t e u r l %}

    c l a s s=” v i e w s i t e l i n k ”>
    {% t r a n s ”View on s i t e ” %}

    {% e n d i f%}

    {% e n d i f %}{% e n d i f %}
    {% endblock %}

    View Slide

  43. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Custom media definitions
    class ArticleAdmin ( admin . ModelAdmin ) :
    class Media :
    css = {
    ” a l l ” : ( ” m y s t y l e s . css ” ,)
    }
    j s = ( ”my code . j s ” ,)

    View Slide

  44. One admin site per subdomain is easy!

    View Slide

  45. Multiple lists per same Model in different use cases

    View Slide

  46. Proxy models for aggregation of data values

    View Slide

  47. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Row level permissions
    has add permission ( s e l f , request )
    has change permission ( s e l f , request , obj=None )
    h a s d e l e t e p e r m i s s i o n ( s e l f , request , obj=None )

    View Slide

  48. App level, Site level permissions

    View Slide

  49. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Explicitly add the other admin modules
    # u r l s . py
    from django . conf . u r l s import patterns , url , i n c l u d e
    from myproject . admin import b a s i c s i t e , a d v a n c e d s i t e
    u r l p a t t e r n s = p a t t e r n s ( ’ ’ ,
    ( r ’ ˆ basic −admin/ ’ , i n c l u d e ( b a s i c s i t e . u r l s )) ,
    ( r ’ ˆadvanced−admin/ ’ , i n c l u d e ( a d v a n c e d s i t e . u r l s )) ,
    )

    View Slide

  50. Instatiate Multiple Admin sites

    View Slide

  51. Add any external views to the admin

    View Slide

  52. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    • Fieldsets
    • Filter Horizontal
    • Tabular/Stacked Inlines
    • Generic Inlines
    • Form field overrides
    • Date Hierarchy
    • Raw ID fields
    • ReadOnly fields
    • Admin Docs

    View Slide

  53. Plenty of third party packages

    View Slide

  54. Media/Template changes only

    View Slide

  55. Enables admin like functionality

    View Slide

  56. Extend the admin functionality (django-object-tools, autocomplete)

    View Slide

  57. Admin tools, django-suite

    View Slide

  58. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Responsive web design

    View Slide

  59. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Add more standardised views easily

    View Slide

  60. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    Image Attributions
    http ://www. f l i c k r . com/ photos / h i n k e l s t o n e /2765597758
    http ://www. f l i c k r . com/ photos /2552[email protected]/2491915744
    http ://www. f l i c k r . com/ photos /[email protected]/8378057370
    http ://www. f l i c k r . com/ photos /micahdowty /3866958782
    http ://www. f l i c k r . com/ photos /[email protected]/7468442446
    http ://www. f l i c k r . com/ photos / marlenek /2051394370
    http ://www. f l i c k r . com/ photos / t e j e d o r o d e l u z /3157690060/
    http ://www. f l i c k r . com/ photos /[email protected]/4287681570/
    http ://www. f l i c k r . com/ photos / a i d a n j o n e s /3575000735/
    http ://www. f l i c k r . com/ photos /go /253819/
    http ://www. f l i c k r . com/ photos / o r i n r o b e r t j o h n /114430223/

    View Slide

  61. Admin Issues Setting Perspective Overview Customizations External apps Admin Next
    About Me
    • Active Djangonaut and active in Python world
    • Part of a few popular open source django applications
    github.com/becomingGuru, stackoverflow.com/users/55562
    • Co-Authored an ebook ”django-design-patterns”
    • Architect and develop full stack applications at Mckinsey
    • Earlier, Consulting and Development via Agiliq Solutions
    • Developed several custom proprietory django applications
    • twitter.com/becomingGuru

    View Slide

  62. @becomingGuru, [email protected]

    View Slide