Django admin site應用


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)
View Code

   通過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
models.py
 
        

  另外在添加數據時,若添加中文報錯:'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,)

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM