Django之ModelAdmin詳解
標簽: Django Python django python
添加應用建好表后,django的后臺管理,需要在admin.py 里進行后臺注冊
有3種注冊方式
# 第一種
from django.contrib import admin
from myproject.myapp.models import Author
class AuthorAdmin(admin.ModelAdmin):
pass
admin.site.register(Author, AuthorAdmin)
# 第二種
from django.contrib import admin
from myproject.myapp.models import Author
admin.site.register(Author)
# 第三種
from django.contrib import admin
from myproject.myapp.models import Author
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
pass
控制操作欄在頁面上的顯示位置。默認情況下,管理員更改列表在頁面()的頂部顯示操作。actions_on_top = True; actions_on_bottom = False
ModelAdmin.actions_selection_counte
控制是否在操作下拉菜單旁邊顯示選擇計數器。默認情況下,管理員更改列表將顯示它()。actions_selection_counter = True
ModelAdmin.date_hierarchy
設置date_hierarchy為 模型中的DateField或的名稱,DateTimeField更改列表頁面將包括該字段的基于日期的向下鉆取導航。
# 此屬性將覆蓋記錄字段為空(None,空字符串等)的默認顯示值。默認值為-(破折號)。
from django.contrib import admin
class AuthorAdmin(admin.ModelAdmin):
empty_value_display = '-empty-'
# 覆蓋empty_value_display所有管理頁面 AdminSite.empty_value_display,或覆蓋類似這樣的特定字段
from django.contrib import admin
class AuthorAdmin(admin.ModelAdmin):
fields = ('name', 'title', 'view_birth_date')
def view_birth_date(self, obj):
return obj.birth_date
view_birth_date.empty_value_display = '???'
從表單中排除的字段名稱列表
from django.contrib import admin
class AuthorAdmin(admin.ModelAdmin):
fields = ('name', 'title')
class AuthorAdmin(admin.ModelAdmin):
exclude = ('birth_date',)
使用該fields選項可以在“添加”和“更改”頁面上的表單中進行簡單的布局更改
class FlatPageAdmin(admin.ModelAdmin):
fields = ('url', 'title', 'content')
url’, ‘title’ 在一行顯示
class FlatPageAdmin(admin.ModelAdmin):
fields = (('url', 'title'), 'content')
設置fieldsets以控制管理員“添加”和“更改”頁面的布局。
fieldsets是一個二元組列表,其中每個二元組在管理表單頁面上代表一個 。(A 是表格的“部分”。)
兩元組的格式為,其中 是代表字段集標題的字符串,并且是有關字段集的信息字典,包括要在其中顯示的字段列表。(name, field_options)namefield_options
from django.contrib import admin
class FlatPageAdmin(admin.ModelAdmin):
fieldsets = (
(None, {
'fields': ('url', 'title', 'content', 'sites')
}),
('Advanced options', {
'classes': ('collapse',),
'fields': ('registration_required', 'template_name'),
}),
)
設置list_filter以**管理員更改列表頁面右側欄中的過濾器
list_filter 應為元素的列表或元組,其中每個元素應為以下類型之一:
字段名稱,其中指定的字段應該是一個 BooleanField,CharField,DateField,DateTimeField, IntegerField,ForeignKey或ManyToManyField,例如:
class PersonAdmin(admin.ModelAdmin):
list_filter = ('is_staff', 'company')
也可以使用__查找來跨越關系,例如:
class PersonAdmin(admin.UserAdmin):
list_filter = ('company__name',)
ModelAdmin.list_max_show_all
設置list_max_show_all以控制在“顯示全部”管理員更改列表頁面上可以顯示多少個項目。僅當總結果計數小于或等于此設置時,管理員才會在更改列表上顯示“顯示全部”鏈接。默認情況下,此設置為200。
ModelAdmin.list_per_page
設置list_per_page為控制在每個分頁的管理員更改列表頁面上顯示多少個項目。默認情況下,此設置為100。
ModelAdmin.list_select_related
設置list_select_related為告訴Django select_related()在管理更改列表頁面上檢索對象列表時使用。這樣可以為您節省大量數據庫查詢。
該值應該是布爾值,列表或元組。默認值為 False。
當value為時True,select_related()將始終被調用。當value設置False為時,Django將查看list_display并調用( select_related()如果ForeignKey存在)。
如果您需要更細粒度的控制,請使用元組(或列表)作為的值 list_select_related。空元組將完全阻止Django調用 select_related。任何其他元組將直接select_related作為參數傳遞給 。例如:
class ArticleAdmin(admin.ModelAdmin):
list_select_related = ('author', 'category')
設置ordering以指定應如何在Django管理視圖中對對象列表進行排序。這應該是與模型ordering參數格式相同的列表或元組。
ModelAdmin.paginator
用于分頁的分頁器類。默認情況下, django.core.paginator.Paginator使用。如果自定義分頁器類的構造函數接口不同 django.core.paginator.Paginator,您還需要提供一個實現ModelAdmin.get_paginator()。
ModelAdmin.prepopulated_fields
設置prepopulated_fields為字典,將字段名稱映射到應預填充的字段:
class ArticleAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
prepopulated_fields不接受DateTimeField,ForeignKey, OneToOneField,和ManyToManyField領域。
ModelAdmin.preserve_filters
現在,管理員可以在創建,編輯或刪除對象后在列表視圖上保留過濾器。您可以通過將此屬性設置為來恢復清除過濾器的先前行為False。
ModelAdmin.radio_fields
默認情況下,Django的管理員將選擇框界面()用于ForeignKey已choices設置或已設置的字段。如果中存在字段radio_fields,則Django將改用單選按鈕界面。假設group是ForeignKey對Person模型:
class PersonAdmin(admin.ModelAdmin):
radio_fields = {"group": admin.VERTICAL}
ModelAdmin.save_as
設置save_as為在管理員更改表單上啟用“另存為”功能。
通常,對象具有三個保存選項:“保存”,“保存并繼續編輯”和“保存并添加另一個”。如果save_as為True,則將“保存并添加另一個”替換為“另存為新”按鈕,該按鈕可創建新對象(具有新ID)而不是更新現有對象。
默認情況下,save_as設置為False。
ModelAdmin.save_as_continue
當save_as=True,節省了新對象后的默認重定向是該對象的更改視圖。如果設置了 save_as_continue=False,重定向將轉到更改列表視圖。
默認情況下,save_as_continue設置為True。
ModelAdmin.save_on_top
設置save_on_top為在您的管理員更改表單頂部添加保存按鈕。
通常,保存按鈕僅出現在表單底部。如果設置save_on_top,則按鈕將同時顯示在頂部和底部。
默認情況下,save_on_top設置為False。
ModelAdmin.search_fields
設置search_fields為在管理員更改列表頁面上啟用搜索框。應該將其設置為一個字段名稱列表,只要有人在該文本框中提交搜索查詢,就將對其進行搜索。
這些字段應該是某種文本字段,例如CharField或 TextField。您還可以使用ForeignKey或 ManyToManyField使用查詢API“跟隨”表示法執行相關的查詢:
search_fields = ['foreign_key__related_fieldname']
例如,如果您有一個包含作者的博客條目,則以下定義??將允許按作者的電子郵件地址搜索博客條目:
search_fields = ['user__email']
ModelAdmin樣式腳本定義
有時候您想在添加/更改視圖中添加一些CSS和/或JavaScript。這可以通過Media在您的上使用內部類來完成ModelAdmin
class ArticleAdmin(admin.ModelAdmin):
class Media:
css = {
"all": ("my_styles.css",)
}
js = ("my_code.js",)
InlineModelAdmin對象
類InlineModelAdmin¶
類TabularInline¶
類StackedInline¶
管理界面可以在與父模型相同的頁面上編輯模型。這些稱為內聯。假設您有以下兩個模型:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
您可以在作者頁面上編輯作者創作的書籍。通過在中指定內聯,可以將內聯添加到模型中ModelAdmin.inlines:
from django.contrib import admin
class BookInline(admin.TabularInline):
model = Book
class AuthorAdmin(admin.ModelAdmin):
inlines = [
BookInline,
]
智能推薦
Django 之 生命周期詳解
Django的生命周期 django的生命周期是:前端請求—>nginx—>uwsgi.—>中間件—>url路由---->view視圖—>orm---->拿到數據返回給view---->視圖將數據渲染到模版中拿到字符串---->中間件—>uwsgi---->ng...
Python之django框架模型(models)詳解
第一部分:模型類介紹 1.1 定義屬性 Django根據屬性的類型確定以下信息: 當前選擇的數據庫支持字段的類型 渲染管理表單時使用的默認html控件 在管理站點最低限度的驗證 django會為表創建自動增長的主鍵列,每個模型只能有一個主鍵列,如果使用選項設置某屬性為主鍵列后django不會再創建自動增長的主鍵列。 默認創建的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。 ...
Django之同源和跨域、CSRF詳解
一.CSRF 全稱是Cross Site Request Forgery,字面意思是跨站點偽造請求。 攻擊者通過HTTP請求江數據傳送到服務器,從而盜取回話的cookie。盜取回話cookie之后,攻擊者不僅可以獲取用戶的信息,還可以修改該cookie關聯的賬戶信息。 原理解釋: 為了防止跨站攻擊,django中需要在前端頁面中添加一個標簽:{% csrf_token %},他會在前端頁面生成一個...
python之Django的model數據類型詳解
閱讀目錄 一、創建django項目和創建app名稱 創建Django項目 創建app名稱 二、在models.py創建數據表 三、配置setting.py文件 四、models數據表導入sqlite 前言 Model 是Django表示數據的模式,這里說明一下,django可以不需要指定數據庫,因為pythont自帶sqlite數據庫,Django也支持各種主流的數據庫存,...
django migration詳解
用了這么久的migration,是時候總結一下這些命令都干了什么啦~ python manage.py makemigrations 首先,django會檢查創建或修改數據庫的合法性,如果不合法會給出提示,比如CharField必須設置max_length,新增了沒有默認值的非空字段。 第一次執行該操作:會在app下面創建migrations目錄,并創建0001_inital.py文件,文件中記錄...
猜你喜歡
Django--Session詳解
1 , 啟用Session Django項目默認啟用Session。可以在settings.py文件中查看 2 , 存儲方式 在settings.py文件中可以設置session的存儲方式 2.1 數據庫 如果存儲在數據庫中,需要在項INSTALLED_APPS中安裝Session應用。 數據庫中的表和表的結構: 由表結構可知,操作Session包括三個數據:鍵,值,過期時間。 2.2...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...