Python Django 后臺管理之后臺模型屬性詳解
十八、Django 后臺模型屬性篇
繼續(xù)在之前的項目中進行代碼的編碼,首先要回憶一下通過 createsuperuser
命令創(chuàng)建的管理員賬號,如果忘記了,需要重新創(chuàng)建一個。
本篇博客涉及的代碼都在 admin.py
文件中,如果你首次打開本篇文章,請翻看本文結(jié)尾出的目錄大綱,可以再次學(xué)習(xí)。
為了便于學(xué)習(xí),提前在 models.py
中新增一個類,代碼如下:
from django.db import models class MyCenter(models.Model): pass
18.1 在 admin 中注冊模型
為了讓 Django 能對 models.py
文件中的類進行管理操作,需要先注冊模型。
把上文提及的 MyCenter
模型進行注冊,此時 admin.py
文件的代碼如下:
from django.contrib import admin from .models import MyCenter class MyCenterAdmin(admin.ModelAdmin): pass admin.site.register(MyCenter, MyCenterAdmin)
注冊成功的結(jié)果就是在后臺頁面,可以看到對模型的操作入口。
其它注冊方式
因為上述 MyCenterAdmin
沒有實現(xiàn)任何功能,所以可以省略掉。修改代碼如下:
from django.contrib import admin from .models import MyCenter admin.site.register(MyCenter)
同樣可以使用裝飾器達到相同的效果。
from django.contrib import admin from .models import MyCenter @admin.register(MyCenter) class MyCenterAdmin(admin.ModelAdmin): pass
18.2 Model.Admin 類提供的屬性
在上文你已經(jīng)看到了,admin.py
文件中的類默認繼承自 Model.Admin
,既然繼承自它,那接下來要掌握的就是它給我們提供的屬性內(nèi)容了。
工作開始前,我們先將 admin.py
文件中的代碼進行修改,主要為了便于頁面展示。
models.py
from django.db import models from django.contrib.auth.models import User class Customer(models.Model): # 自增主鍵 _id = models.AutoField(primary_key=True) name = models.CharField(max_length=20, verbose_name="客戶名") mobile = models.IntegerField(default=0, verbose_name="手機號碼") class Score(models.Model): # 自增主鍵 _id = models.AutoField(primary_key=True) customer = models.ForeignKey(Customer, on_delete=models.CASCADE) score = models.IntegerField(default=0, verbose_name="分數(shù)")
admin.py
from django.contrib import admin from .models import Customer @admin.register(Customer) class CustomerAdmin(admin.ModelAdmin): pass
上述內(nèi)容補充完整之后,就可以進行后臺對數(shù)據(jù)進行維護了。
接下來就要學(xué)習(xí)第一個屬性:date_hierarchy
。
18.2.1 date_hierarchy
該屬性用于將時間列轉(zhuǎn)換為可過濾字段,完成該操作需要在 models.py
中新增好 models.DateField
類型的字段。
create_time = models.DateField(default=timezone.now)
當(dāng)模型發(fā)生變化,需要用下述命令進行一下同步。
python manage.py makemigrations scoring python manage.py migrate
模型變化遷移之后,就可以在 admin.py
中進行配置了。
from django.contrib import admin from .models import Customer @admin.register(Customer) class CustomerAdmin(admin.ModelAdmin): date_hierarchy = "create_time"
此時再運行應(yīng)用之后,就可以在 customer 頁面查看到最終結(jié)果了。
18.2.2 actions_on_top/actions_on_bottom
控制動作條的顯示位置,動作即操作。
修改 admin.py
文件代碼如下,可以控制動作條的展示位置。
@admin.register(Customer) class CustomerAdmin(admin.ModelAdmin): date_hierarchy = "create_time" # actions_on_top = False actions_on_bottom = True
18.2.3 actions_selection_counter
動作條后面的計數(shù)是否展示。當(dāng)其設(shè)置為 False 之后,后面的數(shù)字消失。
18.2.4 list_display
該屬性可以控制模型中列表顯示的字段。代碼修改為如下內(nèi)容:
@admin.register(Customer) class CustomerAdmin(admin.ModelAdmin): date_hierarchy = "create_time" actions_on_top = False actions_on_bottom = True list_display = ["_id", "name", "mobile", "create_time"]
最終呈現(xiàn)的數(shù)據(jù)如下:
list_display
還可以給字段嵌套一個函數(shù)。
def warp_name(obj): return f"客戶名:{obj.name}" @admin.register(Customer) class CustomerAdmin(admin.ModelAdmin): date_hierarchy = "create_time" actions_on_top = False actions_on_bottom = True # warp_name 為函數(shù)名,函數(shù)內(nèi)會接收一個對象 list_display = ["_id", warp_name, "mobile", "create_time"] warp_name.short_description = "格式化的名字"
也可以將上述代碼的 warp_name
函數(shù),放置到 CustomerAdmin
內(nèi)部。
@admin.register(Customer) class CustomerAdmin(admin.ModelAdmin): date_hierarchy = "create_time" actions_on_top = False actions_on_bottom = True def warp_name(self, obj): return f"客戶名:{obj.name}" list_display = ["_id", 'warp_name', "mobile", "create_time"] warp_name.short_description = "格式化名字"
此時最大的區(qū)別就是 list_display
的列表中自定義的函數(shù)為一個字符串形式。
默認情況下 list_display
的第一項是超鏈接,點擊可以進行編輯頁面,可以通過 list_display_links 進行設(shè)置。
list_display_links
:為 None 表示不顯示任何鏈接;列表
:標(biāo)記哪些需要超鏈接。
18.2.5 empty_value_display
空數(shù)據(jù)展示的方式,默認空數(shù)據(jù)展示的是 --
,使用該屬性之后,可以進行自定義設(shè)置。
修改 models.py
文件,增加備注列。
class Customer(models.Model): # 自增主鍵 _id = models.AutoField(primary_key=True) name = models.CharField(max_length=20, verbose_name="客戶名") mobile = models.IntegerField(default=0, verbose_name="手機號碼") create_time = models.DateField(default=timezone.now) mark = models.CharField(max_length=50, null=True, blank=True)
重新運行遷移命令,然后運行應(yīng)用,得到如下效果。
接下來使用該字段進行數(shù)據(jù)的展示,在 admin.py
文件中進行設(shè)置。
empty_value_display = '/'
運行之后得到的結(jié)果如下:
18.2.6 fields
控制顯示的表單字段與順序組合。例如增加如下代碼之后,核對結(jié)果如下:
list_display = ["_id", 'warp_name', "mobile", "create_time","mark"] fields = ["mobile","name"]
18.2.7 其他要補充的屬性
filter_horizontal 與 filter_vertical
篩選菜單的橫排展示與豎排展示。
list_editable
可編輯字段。
list_filter
過濾器屬性設(shè)置。
list_per_page
每頁顯示的數(shù)據(jù)條數(shù)。
ordering
排序字段列表。
paginator
分頁類對象,需要提前引入 django.core.paginator.Paginator
。
radio_fields
字段在表單中是單選按鈕。
readonly_fields
不可編輯字段。
search_fileds
列表頁增加的篩選字段。
到此這篇關(guān)于Python Django 后臺管理之后臺模型屬性的文章就介紹到這了,更多相關(guān)Python Django 后臺管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Jmeter實現(xiàn)在請求param和body里面加入隨機參數(shù)
本文介紹了如何使用jemeter實現(xiàn)新增接口壓力測試中的隨機參數(shù)生成,首先,使用函數(shù)助手對話框生成隨機數(shù),然后將生成的隨機數(shù)作為參數(shù)放入請求中,無論請求格式是json、xml還是text等,如果param和body同時存在并需要隨機生成參數(shù),可以把參數(shù)寫入到請求地址中2024-10-10RuntimeError:CUDA?out?of?memory多種場景下的解決方案
若遇到RuntimeError:?CUDA?out?of?memory錯誤,通常意味著GPU內(nèi)存不足以處理當(dāng)前的計算需求,本文就來介紹一下多種場景下的解決方案,具有一定的參考價值,感興趣的可以了解一下2024-02-02如何使用Python 抓取和優(yōu)化所有網(wǎng)站圖像
我發(fā)布了一個通過FTP自動優(yōu)化新圖像的教程。這次我們將抓取整個網(wǎng)站,并在本地優(yōu)化我們遇到的圖像,按URL組織,怎么來操作呢,下面跟隨小編一起學(xué)習(xí)使用Python 抓取和優(yōu)化所有網(wǎng)站圖像的方法,感興趣的朋友一起看看吧2023-02-02詳解Python數(shù)據(jù)結(jié)構(gòu)與算法中的順序表
線性表在計算機中的表示可以采用多種方法,采用不同存儲方法的線性表也有著不同的名稱和特點。線性表有兩種基本的存儲結(jié)構(gòu):順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)。本文將介紹順序存儲結(jié)構(gòu)的特點以及各種基本運算的實現(xiàn)。需要的可以參考一下2022-01-01python Pandas庫基礎(chǔ)分析之時間序列的處理詳解
這篇文章主要介紹了python Pandas庫基礎(chǔ)分析之時間序列的處理詳解,Pandas作為Python環(huán)境下的數(shù)據(jù)分析庫,更是提供了強大的日期數(shù)據(jù)處理的功能,是處理時間序列的利器,需要的朋友可以參考下2019-07-07