Django(十八)后台管理:列表頁選項、編輯頁選項、自定義后台頁面


【參考】https://blog.csdn.net/u010132177/article/details/103814357
【參考】https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial07/#customize-the-admin-change-list

1. 后台管理頁面:列表選項http://127.0.0.1:8000/admin/app2/

在這里插入圖片描述

  • html文檔教程里有列表選項詳細條目

1)app2/models.py

from django.db import models

class AreaInfo(models.Model):
    '''地址模型類'''
    class Meta: #自定義表名為bookinfo(因為用的是之前示例的數據庫表,它的名字是默認配置的app1_bookinfo)
        db_table = 'app1_areainfo'
    # 地區名稱
    atitle = models.CharField(verbose_name='標題', max_length=20)
    # 自關聯屬性
    aParent = models.ForeignKey('self', null=True, blank=True,verbose_name='上級',on_delete=models.CASCADE)

    def __str__(self):#把標題做為類返回名(areainfo)
        return self.atitle

    def title(self): #自定義一個方法返回地區名
        return self.atitle
    title.admin_order_field = 'atitle' #定義排序(默認自定的title是無法點它標題進行排序的)
    title.short_description = '地區名稱' #定義顯示名

    def parent(self):#自定義一個方法返回父地區名
        if self.aParent is None: #如果父級為空則返回空(無此步會報錯)
            return ''
        return self.aParent.atitle #父級存在則返回其父級名
    parent.short_description = '父級地區名稱' #定義顯示名

2)admin.py

from django.contrib import admin
from app2.models import BookInfo,AreaInfo   #【1】導入模型下的表
# Register your models here.

class AreaInfoAdmin(admin.ModelAdmin):
    '''地區模型管理類'''
    list_per_page = 10   # 【2】指定每頁顯示10條數據
    list_display = ['id', 'atitle', 'title', 'parent'] #【3】指定后台列表顯示列
    actions_on_bottom=True #【6】底部顯示刪除動作選項
    actions_on_top=False #【7】刪除頭部動作選項
    list_filter = ['atitle','aParent'] # 【8】列表頁右側過濾欄
    search_fields = ['atitle'] # 【9】列表頁上方的搜索框


admin.site.register(AreaInfo,AreaInfoAdmin) #【4】注冊導入進來的AreaInfo,和剛寫的類名AreaInfoAdmin
admin.site.register(BookInfo) #【5】注冊圖書類
    

3)登錄后台:http://127.0.0.1:8000/admin/app2/areainfo/

在這里插入圖片描述

4)【刪除動作】顯示隱藏(app2/admin.py)

【6】底部顯示刪除動作選項
【7】刪除頭部動作選項

from django.contrib import admin
from app2.models import BookInfo,AreaInfo   #【1】導入模型下的表
# Register your models here.

class AreaInfoAdmin(admin.ModelAdmin):
    '''地區模型管理類'''
    list_per_page = 10   # 【2】指定每頁顯示10條數據
    list_display = ['id', 'atitle', 'title', 'parent'] #【3】指定后台列表顯示列
    actions_on_bottom=True #【6】底部顯示刪除動作選項
    actions_on_top=False #【7】刪除頭部動作選項
    list_filter = ['atitle','aParent'] # 【8】列表頁右側過濾欄
    search_fields = ['atitle'] # 【9】列表頁上方的搜索框


admin.site.register(AreaInfo,AreaInfoAdmin) #【4】注冊導入進來的AreaInfo,和剛寫的類名AreaInfoAdmin
admin.site.register(BookInfo) #【5】注冊圖書類
    

效果:頭部動作沒了,底部動作出現。
在這里插入圖片描述

5)顯示頭部【搜索框】、右側【過濾欄】

【8】列表頁右側過濾欄,根據標題過濾,上級過濾
【9】列表頁上方的搜索框,根據標題過濾,不要加上級,會出錯

from django.contrib import admin
from app2.models import BookInfo,AreaInfo   #【1】導入模型下的表
# Register your models here.

class AreaInfoAdmin(admin.ModelAdmin):
    '''地區模型管理類'''
    list_per_page = 10   # 【2】指定每頁顯示10條數據
    list_display = ['id', 'atitle', 'title', 'parent'] #【3】指定后台列表顯示列
    actions_on_bottom=True #【6】底部顯示刪除動作選項
    actions_on_top=False #【7】刪除頭部動作選項
    list_filter = ['atitle','aParent'] # 【8】列表頁右側過濾欄
    search_fields = ['atitle'] # 【9】列表頁上方的搜索框


admin.site.register(AreaInfo,AreaInfoAdmin) #【4】注冊導入進來的AreaInfo,和剛寫的類名AreaInfoAdmin
admin.site.register(BookInfo) #【5】注冊圖書類
    

在這里插入圖片描述
在這里插入圖片描述

2.后台管理頁:編輯頁選項http://127.0.0.1:8000/admin/app2/areainfo/110000/change/?_changelist_filters=o%3D1

在這里插入圖片描述

1)位置調換(app2/admin.py)

在這里插入圖片描述
fields = ['aParent', 'atitle'] 【10】編輯頁顯示位置控制

from django.contrib import admin
from app2.models import BookInfo,AreaInfo   #【1】導入模型下的表
# Register your models here.

class AreaInfoAdmin(admin.ModelAdmin):
    '''地區模型管理類'''
    list_per_page = 10   # 【2】指定每頁顯示10條數據
    list_display = ['id', 'atitle', 'title', 'parent'] #【3】指定后台列表顯示列
    actions_on_bottom=True #【6】底部顯示刪除動作選項
    actions_on_top=False #【7】刪除頭部動作選項
    list_filter = ['atitle','aParent'] # 【8】列表頁右側過濾欄
    search_fields = ['atitle'] # 【9】列表頁上方的搜索框

    fields = ['aParent', 'atitle'] #【10】編輯頁顯示位置控制


admin.site.register(AreaInfo,AreaInfoAdmin) #【4】注冊導入進來的AreaInfo,和剛寫的類名AreaInfoAdmin
admin.site.register(BookInfo) #【5】注冊圖書類
    

效果:

在這里插入圖片描述

2)對編輯頁面的條目進行分組

from django.contrib import admin
from app2.models import BookInfo,AreaInfo   #【1】導入模型下的表
# Register your models here.

class AreaInfoAdmin(admin.ModelAdmin):
    '''地區模型管理類'''
    list_per_page = 10   # 【2】指定每頁顯示10條數據
    list_display = ['id', 'atitle', 'title', 'parent'] #【3】指定后台列表顯示列
    actions_on_bottom=True #【6】底部顯示刪除動作選項
    actions_on_top=False #【7】刪除頭部動作選項
    list_filter = ['atitle','aParent'] # 【8】列表頁右側過濾欄
    search_fields = ['atitle'] # 【9】列表頁上方的搜索框

    #fields = ['aParent', 'atitle'] #【10】編輯頁顯示位置控制
    #【11】對編輯頁面的條目進行分組
    fieldsets = (
        ('基本', {'fields':['atitle']}),
        ('高級', {'fields':['aParent']})
    )

admin.site.register(AreaInfo,AreaInfoAdmin) #【4】注冊導入進來的AreaInfo,和剛寫的類名AreaInfoAdmin
admin.site.register(BookInfo) #【5】注冊圖書類 

在這里插入圖片描述

3)關聯對象

【1】先定義一個新類
【1-1】新類2
【2】使用
【22】使用

from django.contrib import admin
from app2.models import BookInfo,AreaInfo   #導入模型下的表
# Register your models here.
#【1】先定義一個新類
class AreaStackedInline(admin.StackedInline):
    # 寫多類的名字
    model = AreaInfo
    extra = 2 #空白為2個
#【1-1】新類2
class AreaTabularInline(admin.TabularInline):
    model = AreaInfo
    extra = 2

class AreaInfoAdmin(admin.ModelAdmin):
    '''地區模型管理類'''
    list_per_page = 10   # 指定每頁顯示10條數據
    list_display = ['id', 'atitle', 'title', 'parent'] #指定后台列表顯示列
    actions_on_bottom=True #底部顯示刪除動作選項
    actions_on_top=False #刪除頭部動作選項
    list_filter = ['atitle','aParent'] # 列表頁右側過濾欄
    search_fields = ['atitle'] # 列表頁上方的搜索框

    #fields = ['aParent', 'atitle'] #編輯頁顯示位置控制
    #對編輯頁面的條目進行分組
    fieldsets = (
        ('基本', {'fields':['atitle']}),
        ('高級', {'fields':['aParent']})
    )
 
    inlines = [AreaStackedInline] #【2】使用
    #inlines = [AreaTabularInline] #【2-2】使用


admin.site.register(AreaInfo,AreaInfoAdmin) #注冊導入進來的AreaInfo,和剛寫的類名AreaInfoAdmin
admin.site.register(BookInfo) #注冊圖書類
    

【2】注釋掉2-2,顯示2

在這里插入圖片描述

【2-2】注釋掉【2】

在這里插入圖片描述

3.后台管理_自定義頁面

1)在templates/目錄下創建admin目錄,結構如下圖:

templates/admin/base_site.html

2)打開當前虛擬環境中Django的目錄,再向下找到admin的模板,目錄如下:

/home/python/.virtualenvs/py_django/lib/python3.5/site-packages/django/contrib/admin/templates/admin

3)將需要更改文件拷貝到第一步建好的目錄里,此處以base_site.html為例。

templates/admin/base_site.html

編輯base_site.html文件:

{% extends "admin/base.html" %}

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
<hr>
<h1>自定義的管理頁模板</h1>
<hr>
{% endblock %}

{% block nav-global %}{% endblock %}

4)在瀏覽器中轉到列表頁面,刷新后如下圖:在這里插入圖片描述


免責聲明!

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



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