SlideShare a Scribd company logo
Django admin
Python meetup
Ines Jelovac
Zagreb, 14 June 2016
Django Web Framework
● High-level Python Web framework
● MVC
Django admin
● Automatic interface
● For site administrators
● Reads model metadata
● Customizing:
○ Layout
○ Filters
○ Actions
Model example
class Article(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL)
title = models.CharField(max_length=200)
lead_text = models.CharField(max_length=300)
content = models.TextField()
publish_date = models.DateTimeField()
image = models.ImageField()
section = models.ManyToManyField(Section)
def __str__(self):
return self.title
Model metadata
class Article(models.Model):
...
class Meta:
verbose_name = _('Article')
verbose_name_plural = _('Articles')
ordering = ('-publish_date',)
Default admin interface
app/admin.py
from django.contrib import admin
from articles.models import Article
admin.site.register(Article)
Default list interface
Customizing objects list: list_display
● List objects page
○ Default: str() of each object
● list_display option
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'publish_date']
● list_display_links option
Customizing objects list: list_display
Customizing objects list: empty_value_display
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'publish_date']
empty_value_display = '(unknown)'
Customizing objects list: empty_value_display
Customizing objects list: list_filter
● Model field
● Foreign key attribute lookup
● Custom querysets
● preserve_filters option
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'publish_date']
empty_value_display = '(unknown)'
list_filter = ['section', PublishedListFilter]
Customizing objects list: list_filter
class PublishedListFilter(admin.SimpleListFilter):
title = 'published'
parameter_name = 'publish_date'
def lookups(self, request, model_admin):
return (
('published', 'published'),
('not_published', 'not published')
)
def queryset(self, request, queryset):
if self.value() == 'published':
return queryset.filter(publish_date__isnull=False)
if self.value() == 'not_published':
return queryset.filter(publish_date__isnull=True)
Customizing objects list: list_filter
Customizing objects list: date_hierarchy
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'publish_date']
empty_value_display = '(unknown)'
list_filter = ['section', PublishedListFilter]
date_hierarchy = 'publish_date'
Customizing objects list: date_hierarchy
Customizing objects list: search_fields
● Model field
● Foreign key attribute lookup
● Operators
○ ^ to match starting at the beginning of the field
○ = for case-insensitive exact matching
○ @ operator to perform a full text match
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'publish_date']
empty_value_display = '(unknown)'
list_filter = ['section', PublishedListFilter]
date_hierarchy = 'publish_date'
search_fields = ['title']
Customizing objects list: search_fields
Customizing objects list: list_editable
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'lead_text','publish_date']
empty_value_display = '(unknown)'
list_filter = ['section', PublishedListFilter]
date_hierarchy = 'publish_date'
search_fields = ['title']
list_editable = ['lead_text']
Customizing objects list: list_editable
Default edit interface
Default edit interface
● Default buttons
○ Delete
○ Save and add another
○ Save and continue editing
○ Save
● save_as option: if set to True “Save as new” replaces “Save and add
another” button
Customizing edit interface: fields
● fields option
○ List of fields in model edit form
○ Change order
○ Group in same line
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
fields = [
'author',
('title', 'lead_text'),
'content',
('publish_date', 'image'),
'section'
]
Customizing edit interface
Customizing edit interface
● exclude option
○ List of fields not shown in edit form
● readonly_fields option
○ Field or method
● fieldsets option
○ Group fields
● form option
○ Replace default Form with custom
● view_on_site option
○ Boolean - calls get_absolute_url
○ Callable
Customizing edit interface: many to many
● filter_horizontal option
● filter_vertical option
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
…
filter_horizontal = ['section']
Customizing edit interface: filter_horizontal
Customizing edit interface: inlines
● TabularInline
● StackedInline
class GalleryInline(admin.TabularInline):
model = GalleyImage
extra = 2
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
...
filter_horizontal = ['section']
inlines = [GalleryInline]
Customizing edit interface: inlines
Customizing admin interface: actions
● Functions that get called with a list of objects selected on the change list page
● Simple logic: use function
● Complex logic: redirect the user to another view in function
def delete_publish_date(modeladmin, request, queryset):
queryset.update(publish_date=None)
delete_publish_date.short_description = "Delete published
date for selected articles"
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
…
actions = [delete_publish_date]
Customizing edit interface: actions
Customizing admin interface: actions
Optimization
● show_full_result_count option in list view
○ Eliminates expensive count
● list_select_related option in list view
○ Django will use select_related in query
● raw_id_fields option in edit view
There is more
● Overriding default templates
● Overriding methods
● History view
● Decorator @staff_member_required
ljudski_potencijali@styria.hr

More Related Content

PDF
Odoo - Backend modules in v8
PDF
Odoo - Business intelligence: Develop cube views for your own objects
PPTX
Odoo Web Services
PDF
djangoのmigrationはどう動いているか
PDF
How to customize views & menues of OpenERP online in a sustainable way. Frede...
PPTX
Odoo (open erp) creating a module
PDF
Open Selector
PDF
Asp 3-html helpers in asp.net
Odoo - Backend modules in v8
Odoo - Business intelligence: Develop cube views for your own objects
Odoo Web Services
djangoのmigrationはどう動いているか
How to customize views & menues of OpenERP online in a sustainable way. Frede...
Odoo (open erp) creating a module
Open Selector
Asp 3-html helpers in asp.net

What's hot (12)

PPTX
Drupal 9 training ajax
PPTX
11. delete record
PPTX
10. view one record
PPTX
12. edit record
PPTX
Session 2 django material for training at baabtra models
PDF
Two scoopsofdjango ch16 dealing with the user model
PPTX
8. vederea inregistrarilor
PPTX
Window object methods (timer related)
PDF
Forms, Getting Your Money's Worth
DOC
Validation
PPTX
20. CodeIgniter edit images
PDF
Two scoopsofdjango common patterns for forms
Drupal 9 training ajax
11. delete record
10. view one record
12. edit record
Session 2 django material for training at baabtra models
Two scoopsofdjango ch16 dealing with the user model
8. vederea inregistrarilor
Window object methods (timer related)
Forms, Getting Your Money's Worth
Validation
20. CodeIgniter edit images
Two scoopsofdjango common patterns for forms
Ad

Viewers also liked (20)

PDF
Magic Methods (Python meetup)
PDF
Django Rest Framework and React and Redux, Oh My!
PDF
Starters with Django
PDF
Efficient Django
PDF
David Threets Professional Persona Project
PDF
Free django
PDF
Django Introduction & Tutorial
PDF
Getting Started With Django
PDF
Django 實戰 - 自己的購物網站自己做
PDF
那些年,我用 Django Admin 接的案子
PPTX
Django로 배우는 쉽고 빠른 웹개발 study 자료
PDF
Architecture at SimpleGeo: Staying Agile at Scale
PDF
The Web map stack on Django
PDF
Advanced Django
PDF
Django in the Real World
PDF
Open edX vs Moodle
KEY
Scaling Django
ODP
Django for Beginners
PPTX
DJango admin interface
PDF
Django Best Practices
Magic Methods (Python meetup)
Django Rest Framework and React and Redux, Oh My!
Starters with Django
Efficient Django
David Threets Professional Persona Project
Free django
Django Introduction & Tutorial
Getting Started With Django
Django 實戰 - 自己的購物網站自己做
那些年,我用 Django Admin 接的案子
Django로 배우는 쉽고 빠른 웹개발 study 자료
Architecture at SimpleGeo: Staying Agile at Scale
The Web map stack on Django
Advanced Django
Django in the Real World
Open edX vs Moodle
Scaling Django
Django for Beginners
DJango admin interface
Django Best Practices
Ad

Similar to Django Admin (Python meeutp) (20)

PDF
Chapter 6 the django admin site
PDF
Customizing the Django Admin
KEY
Admin
PDF
What’S New In Newforms Admin
PDF
PDF
Django 1.10.3 Getting started
PDF
Django design-patterns
PDF
Django workshop : let's make a blog
PDF
Django Heresies
PDF
Working with the django admin
PDF
Django
PPTX
Discovering Django - zekeLabs
KEY
Introduction Django
PDF
Django admin
PDF
django
PPTX
Django crush course
PDF
Introduction to Django
ODP
Introduction to Django
PDF
Basic Crud In Django
PDF
djangoic approach to implement common web development paradigms
Chapter 6 the django admin site
Customizing the Django Admin
Admin
What’S New In Newforms Admin
Django 1.10.3 Getting started
Django design-patterns
Django workshop : let's make a blog
Django Heresies
Working with the django admin
Django
Discovering Django - zekeLabs
Introduction Django
Django admin
django
Django crush course
Introduction to Django
Introduction to Django
Basic Crud In Django
djangoic approach to implement common web development paradigms

Recently uploaded (20)

PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Encapsulation theory and applications.pdf
PDF
KodekX | Application Modernization Development
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Electronic commerce courselecture one. Pdf
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPT
Teaching material agriculture food technology
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Machine learning based COVID-19 study performance prediction
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Encapsulation theory and applications.pdf
KodekX | Application Modernization Development
MYSQL Presentation for SQL database connectivity
Electronic commerce courselecture one. Pdf
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Building Integrated photovoltaic BIPV_UPV.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Diabetes mellitus diagnosis method based random forest with bat algorithm
Chapter 3 Spatial Domain Image Processing.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Teaching material agriculture food technology
Unlocking AI with Model Context Protocol (MCP)
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Advanced methodologies resolving dimensionality complications for autism neur...
Mobile App Security Testing_ A Comprehensive Guide.pdf
Machine learning based COVID-19 study performance prediction
Reach Out and Touch Someone: Haptics and Empathic Computing
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy

Django Admin (Python meeutp)

  • 1. Django admin Python meetup Ines Jelovac Zagreb, 14 June 2016
  • 2. Django Web Framework ● High-level Python Web framework ● MVC Django admin ● Automatic interface ● For site administrators ● Reads model metadata ● Customizing: ○ Layout ○ Filters ○ Actions
  • 3. Model example class Article(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL) title = models.CharField(max_length=200) lead_text = models.CharField(max_length=300) content = models.TextField() publish_date = models.DateTimeField() image = models.ImageField() section = models.ManyToManyField(Section) def __str__(self): return self.title
  • 4. Model metadata class Article(models.Model): ... class Meta: verbose_name = _('Article') verbose_name_plural = _('Articles') ordering = ('-publish_date',)
  • 5. Default admin interface app/admin.py from django.contrib import admin from articles.models import Article admin.site.register(Article)
  • 7. Customizing objects list: list_display ● List objects page ○ Default: str() of each object ● list_display option @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ['title', 'publish_date'] ● list_display_links option
  • 9. Customizing objects list: empty_value_display @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ['title', 'publish_date'] empty_value_display = '(unknown)'
  • 10. Customizing objects list: empty_value_display
  • 11. Customizing objects list: list_filter ● Model field ● Foreign key attribute lookup ● Custom querysets ● preserve_filters option @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ['title', 'publish_date'] empty_value_display = '(unknown)' list_filter = ['section', PublishedListFilter]
  • 12. Customizing objects list: list_filter class PublishedListFilter(admin.SimpleListFilter): title = 'published' parameter_name = 'publish_date' def lookups(self, request, model_admin): return ( ('published', 'published'), ('not_published', 'not published') ) def queryset(self, request, queryset): if self.value() == 'published': return queryset.filter(publish_date__isnull=False) if self.value() == 'not_published': return queryset.filter(publish_date__isnull=True)
  • 14. Customizing objects list: date_hierarchy @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ['title', 'publish_date'] empty_value_display = '(unknown)' list_filter = ['section', PublishedListFilter] date_hierarchy = 'publish_date'
  • 15. Customizing objects list: date_hierarchy
  • 16. Customizing objects list: search_fields ● Model field ● Foreign key attribute lookup ● Operators ○ ^ to match starting at the beginning of the field ○ = for case-insensitive exact matching ○ @ operator to perform a full text match @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ['title', 'publish_date'] empty_value_display = '(unknown)' list_filter = ['section', PublishedListFilter] date_hierarchy = 'publish_date' search_fields = ['title']
  • 17. Customizing objects list: search_fields
  • 18. Customizing objects list: list_editable @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ['title', 'lead_text','publish_date'] empty_value_display = '(unknown)' list_filter = ['section', PublishedListFilter] date_hierarchy = 'publish_date' search_fields = ['title'] list_editable = ['lead_text']
  • 19. Customizing objects list: list_editable
  • 21. Default edit interface ● Default buttons ○ Delete ○ Save and add another ○ Save and continue editing ○ Save ● save_as option: if set to True “Save as new” replaces “Save and add another” button
  • 22. Customizing edit interface: fields ● fields option ○ List of fields in model edit form ○ Change order ○ Group in same line @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): fields = [ 'author', ('title', 'lead_text'), 'content', ('publish_date', 'image'), 'section' ]
  • 24. Customizing edit interface ● exclude option ○ List of fields not shown in edit form ● readonly_fields option ○ Field or method ● fieldsets option ○ Group fields ● form option ○ Replace default Form with custom ● view_on_site option ○ Boolean - calls get_absolute_url ○ Callable
  • 25. Customizing edit interface: many to many ● filter_horizontal option ● filter_vertical option @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): … filter_horizontal = ['section']
  • 26. Customizing edit interface: filter_horizontal
  • 27. Customizing edit interface: inlines ● TabularInline ● StackedInline class GalleryInline(admin.TabularInline): model = GalleyImage extra = 2 @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): ... filter_horizontal = ['section'] inlines = [GalleryInline]
  • 29. Customizing admin interface: actions ● Functions that get called with a list of objects selected on the change list page ● Simple logic: use function ● Complex logic: redirect the user to another view in function def delete_publish_date(modeladmin, request, queryset): queryset.update(publish_date=None) delete_publish_date.short_description = "Delete published date for selected articles" @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): … actions = [delete_publish_date]
  • 30. Customizing edit interface: actions Customizing admin interface: actions
  • 31. Optimization ● show_full_result_count option in list view ○ Eliminates expensive count ● list_select_related option in list view ○ Django will use select_related in query ● raw_id_fields option in edit view
  • 32. There is more ● Overriding default templates ● Overriding methods ● History view ● Decorator @staff_member_required