橡皮擦,一個逗趣的互聯網高級網蟲,新的系列,讓我們一起進入 Django 世界,
滾雪球學 Python 第三輪
- 十八、Django 后臺模型屬性篇
- 18.1 在 admin 中注冊模型
- 18.2 Model.Admin 類提供的屬性
- 18.2.1 **date_hierarchy**
- 18.2.2 **actions_on_top/actions_on_bottom**
- 18.2.3 **actions_selection_counter**
- 18.2.4 **list_display**
- 18.2.5 **empty_value_display**
- 18.2.6 **fields**
- 18.2.7 其他要補充的屬性
- 18.3 本篇博客小節
十八、Django 后臺模型屬性篇
繼續在之前的專案中進行代碼的編碼,首先要回憶一下通過 createsuperuser 命令創建的管理員賬號,如果忘記了,需要重新創建一個,
本篇博客涉及的代碼都在 admin.py 檔案中,如果你首次打開本篇文章,請翻看本文結尾出的目錄大綱,可以再次學習,
為了便于學習,提前在 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)
注冊成功的結果就是在后臺頁面,可以看到對模型的操作入口,

其它注冊方式
因為上述 MyCenterAdmin 沒有實作任何功能,所以可以省略掉,修改代碼如下:
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 類提供的屬性
在上文你已經看到了,admin.py 檔案中的類默認繼承自 Model.Admin,既然繼承自它,那接下來要掌握的就是它給我們提供的屬性內容了,
作業開始前,我們先將 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="分數")
admin.py
from django.contrib import admin
from .models import Customer
@admin.register(Customer)
class CustomerAdmin(admin.ModelAdmin):
pass
上述內容補充完整之后,就可以進行后臺對資料進行維護了,

接下來就要學習第一個屬性:date_hierarchy,
18.2.1 date_hierarchy
該屬性用于將時間列轉換為可過濾欄位,完成該操作需要在 models.py 中新增好 models.DateField 型別的欄位,
create_time = models.DateField(default=timezone.now)
當模型發生變化,需要用下述命令進行一下同步,
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"
此時再運行應用之后,就可以在 customer 頁面查看到最終結果了,

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
動作條后面的計數是否展示,當其設定為 False 之后,后面的數字消失,

18.2.4 list_display
該屬性可以控制模型中串列顯示的欄位,代碼修改為如下內容:
@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"]
最終呈現的資料如下:

list_display 還可以給欄位嵌套一個函式,
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 為函式名,函式內會接收一個物件
list_display = ["_id", warp_name, "mobile", "create_time"]
warp_name.short_description = "格式化的名字"
也可以將上述代碼的 warp_name 函式,放置到 CustomerAdmin 內部,
@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 = "格式化名字"
此時最大的區別就是 list_display 的串列中自定義的函式為一個字串形式,
默認情況下 list_display 的第一項是超鏈接,點擊可以進行編輯頁面,可以通過 list_display_links 進行設定,
list_display_links:為 None 表示不顯示任何鏈接;串列:標記哪些需要超鏈接,
18.2.5 empty_value_display
空資料展示的方式,默認空資料展示的是 --,使用該屬性之后,可以進行自定義設定,
修改 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)
重新運行遷移命令,然后運行應用,得到如下效果,

接下來使用該欄位進行資料的展示,在 admin.py 檔案中進行設定,
empty_value_display = '/'
運行之后得到的結果如下:

18.2.6 fields
控制顯示的表單欄位與順序組合,例如增加如下代碼之后,核對結果如下:
list_display = ["_id", 'warp_name', "mobile", "create_time","mark"]
fields = ["mobile","name"]

18.2.7 其他要補充的屬性
filter_horizontal 與 filter_vertical
篩選選單的橫排展示與豎排展示,
list_editable
可編輯欄位,
list_filter
過濾器屬性設定,
list_per_page
每頁顯示的資料條數,
ordering
排序欄位串列,
paginator
分頁類物件,需要提前引入 django.core.paginator.Paginator,
radio_fields
欄位在表單中是單選按鈕,
readonly_fields
不可編輯欄位,
search_fileds
串列頁增加的篩選欄位,
18.3 本篇博客小節
本篇博客為你分享是 Django 中后臺模型屬性,一起學習的可以點贊收藏走起來啦,
本文章屬于《滾雪球學 Python 第三輪》中的一篇,歡迎繼續關注,
今天是持續寫作的第 140 / 200 天,可以點贊、評論、收藏啦,
繼續閱讀
- 游走在 “法律邊緣” 的資料采集者,直播梳理
- CSDN 首發,收藏并實踐本文,你就是大學最靚的仔~
- CSDN 的各位新博主們,交個朋友吧~
Django 教程 python web開發框架 django官網 python框架django入門 django rest framework 為什么python不適合開發網站 django登錄注冊模塊實作 django配合什么前端好 django官網中文檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/279816.html
標籤:python
