Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

”one of the most powerful parts of Django”

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

No proper padding

Slide 6

Slide 6 text

Not to use for external applications

Slide 7

Slide 7 text

Hard to customize

Slide 8

Slide 8 text

Not as good UX

Slide 9

Slide 9 text

Doesn’t get enough love

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

... those that solve a complex human problem

Slide 15

Slide 15 text

Frameworks come in between ...

Slide 16

Slide 16 text

Admin is an idea that..

Slide 17

Slide 17 text

...achieves balance at higher abstraction

Slide 18

Slide 18 text

... and helps reduce cost of maintainance and development

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

... Developers dont like to do UI.

Slide 22

Slide 22 text

... UI interfaces can be standardised.

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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 ’ ]

Slide 28

Slide 28 text

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 )) , )

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Custom Media can be added

Slide 31

Slide 31 text

Admin Issues Setting Perspective Overview Customizations External apps Admin Next Customizations

Slide 32

Slide 32 text

Provide values for the attributes defined in BaseModelAdmin.

Slide 33

Slide 33 text

... And those defined in ModelAdmin

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

Most things can be done dynamically. Per request.

Slide 36

Slide 36 text

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 ) :

Slide 37

Slide 37 text

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 ”

Slide 38

Slide 38 text

Extend the ModelAdmin and inject context variables

Slide 39

Slide 39 text

Templates are in contrib/admin/templates/admin/

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

Override template at runtime

Slide 42

Slide 42 text

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 %} {% 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 %}

Slide 43

Slide 43 text

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 ” ,)

Slide 44

Slide 44 text

One admin site per subdomain is easy!

Slide 45

Slide 45 text

Multiple lists per same Model in different use cases

Slide 46

Slide 46 text

Proxy models for aggregation of data values

Slide 47

Slide 47 text

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 )

Slide 48

Slide 48 text

App level, Site level permissions

Slide 49

Slide 49 text

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 )) , )

Slide 50

Slide 50 text

Instatiate Multiple Admin sites

Slide 51

Slide 51 text

Add any external views to the admin

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

Plenty of third party packages

Slide 54

Slide 54 text

Media/Template changes only

Slide 55

Slide 55 text

Enables admin like functionality

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

Admin tools, django-suite

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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 /25521149@N03/2491915744 http ://www. f l i c k r . com/ photos /50764322@N04/8378057370 http ://www. f l i c k r . com/ photos /micahdowty /3866958782 http ://www. f l i c k r . com/ photos /81512202@N05/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 /23820645@N05/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/

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

@becomingGuru, [email protected]