django自帶的admin后台管理,可以實現對數據庫表的增刪改查,用起來十分方便。其使用和配置主要分為三個步驟:
1,創建超級用戶
需要創建超級用戶來登陸admin后台系統,在命令行中輸入 python manage.py createsuperuser
然后根據提示設置用戶名和密碼(郵箱可不設置,密碼至少八位)
2, 注冊model表
在創建的app下的admin.py文件中,需要對創建的model表進行注冊
使用格式如下:

1 from django.contrib import admin 2 import models 3 4 # Register your models here. 5 class BookConfig(admin.ModelAdmin): 6 list_display = ['title','price','publish'] 7 8 9 admin.site.register(models.Book,admin_class=BookConfig) 10 admin.site.register(models.Author) 11 admin.site.register(models.Publish)
通過admin.site.register()注冊后,后台就能顯示相應的model表。另外,在Book表注冊時設置了admin_class=BookConfig,可以對顯示的字段進行自定義,詳細設置見下面的ModelAdmin參數介紹
3, 登陸admin后台
由於在全局的路由中配置了如下的admin后台url,在瀏覽器輸入http://127.0.0.1:8008/admin/,利用設置的超級用戶登陸即可。
urlpatterns = [ url(r'^admin/', admin.site.urls), ]
在settings.py文件中修改LANGUAGE_CODE = 'en-us',設置成LANGUAGE_CODE = 'zh-Hans',能夠使界面變成中文(zh-Hans表示簡體中文)
若要顯示的model表名為中文,需要在model的meta中定義:verbose_name_plural = '書籍' (verbose_name定義后django會自動加上s)
若要models的表的字段顯示為中文,需要實現__str__(),並在每個字段中定義verbose_name,設置代碼如下

1 class Book(models.Model): 2 title = models.CharField(max_length=64,verbose_name='標題') 3 price = models.DecimalField(max_digits=5,decimal_places=2,default=0) 4 author = models.ManyToManyField(to='Author') 5 publish = models.ForeignKey(to='Publish') 6 def __str__(self): 7 return self.title 8 class Meta: 9 verbose_name_plural = '書籍' 10 #verbose_name = '書籍' #這樣設置后會顯示復數形式: 書籍s
另外在添加數據時,若添加中文報錯:'ascii' codec can't encode characters in position 0-3: ordinal not in range(128) , 需要在manage.py 文件中代碼前面加入 reload(sys)和sys.setdefaultencoding('utf8'),如下:
#coding:utf-8 #!/usr/bin/env python import os import sys reload(sys) sys.setdefaultencoding('utf8')
4, ModelAdmin參數介紹
在注冊admin時,通過繼承ModelAdmin,設置相應的字段能夠自定義model表在admin后台的顯式格式,ModelAdmin源代碼中定義的字段如下:
class ModelAdmin(BaseModelAdmin): "Encapsulates all admin options and functionality for a given model." list_display = ('__str__',) list_display_links = () list_filter = () list_select_related = False list_per_page = 100 list_max_show_all = 200 list_editable = () search_fields = () date_hierarchy = None save_as = False save_as_continue = True save_on_top = False paginator = Paginator preserve_filters = True inlines = [] # Custom templates (designed to be over-ridden in subclasses) add_form_template = None change_form_template = None change_list_template = None delete_confirmation_template = None delete_selected_confirmation_template = None object_history_template = None # Actions actions = [] action_form = helpers.ActionForm actions_on_top = True actions_on_bottom = False actions_selection_counter = True checks_class = ModelAdminChecks
常用參數介紹:(官方文檔:https://docs.djangoproject.com/en/2.1/ref/contrib/admin/)
1,list_display = ('__str__',): 設置model表需要顯示的字段,未設置時只顯示__str__()的返回值。如下面設置了title, price,publish三個字段
class BookConfig(admin.ModelAdmin):
list_display = ['title','price','publish']
admin.site.register(models.Book,admin_class=BookConfig)
list_display字段除了支持model字段外,還可以加入自定義的函數,如下面代碼所示,增加了一列:編輯列,實現點擊能進入編輯頁面。 (list_display支持三種方式定義的函數,見官方文檔)
def edit(model_obj): return mark_safe('<a href="%s/change/">編輯</a>' % model_obj.pk) class BookConfig(admin.ModelAdmin): list_display = ['title','price','publish',edit]
2,list_display_links = (),設置model表具有超鏈接的字段(默認為__str__()的返回字段),設置后點擊能進入編輯頁面。如下面的設置,price字段也變成超鏈接
class BookConfig(admin.ModelAdmin):
list_display = ['title','price','publish']
list_display_links = ['title','price']
3,list_filter = (),設置過濾地字段,設置后后台管理右側會出現過濾器(一般都設置為外鍵或多對多字段),點擊能顯示該類別下的數據。如下面設置后,點擊右邊的文藝出版社,能過濾出文藝出版社出版的所有書籍,如左邊所示。
class BookConfig(admin.ModelAdmin):
list_display = ['title','price','publish']
list_display_links = ['title','price']
list_filter = ('author','publish')
4,search_fields = (),設置搜索時進行匹配的字段(不能設置為外鍵或多對多字段),設置后上面會出現搜索框,搜索時會將定義的字段和輸入內容進行匹配,篩選出復合條件的數據。如下面的設置為標題字段,通過搜索浪漫能匹配出標題中含浪漫的數據
class BookConfig(admin.ModelAdmin):
list_display = ['title','price','publish']
list_display_links = ['title','price']
list_filter = ('author','publish')
search_fields = ('title',)

5,actions = [], 設置批處理函數,需要自己定義和實現函數,設置后在action下拉框中會出現設置的相應批處理函數,點擊后能進行批處理。下面的設置定義了一個批量修改價格的方法,如下圖點擊action中的批量修改價格后能將選中的數據的價格修改成24
官方文檔:https://docs.djangoproject.com/en/2.1/ref/contrib/admin/actions/
class BookConfig(admin.ModelAdmin): list_display = ['title','price','publish'] list_display_links = ['title','price'] list_filter = ('author','publish') search_fields = ('title',) def batch_update_price(self,request,queryset): queryset.update(price = 24) # for obj in queryset: # do_something_with(obj) batch_update_price.short_description = "批量修改價格為24" #為該函數定義一個顯示的名稱,可以不設置 actions = (batch_update_price,)