Django第六篇-----如何用Django管理後臺
目錄
使用 Django 管理後臺
執行 django-admin startproject mysite 時,Django 為我們建立並配置了預設的管理後臺。我們只需建立一個管理員使用者(超級使用者),就可以登入管理後臺。
點選chenge可載入使用者列表
在後臺管理自己的模型
在模型資料夾下的admin.py檔案新增如下程式碼
from __future__ import unicode_literals from django.contrib import admin from models import * # Register your models here. admin.site.register(Publisher) admin.site.register(Author) admin.site.register(Book)
重啟伺服器即可看到如下介面
這是昨天寫的資料
設定欄位是否必填
編輯模型程式碼,如下設定,blank=True即可設定為空,預設情況下,所有欄位都是blank=False設定的,就是非空
當你留空字元欄位時,Django 插入資料庫的是空字串(而不是 NULL 值)。
但是,對空字串不是有效值的資料庫列型別(如日期、時間和數字)來說,這樣處理不行。如果把空字串插入日期或整數列,資料庫有可能報錯——這取決於你用的資料庫
此時,只能使用 NULL 指定空值。在 Django 模型中,指定接受 NULL 值的方式是為欄位設定 null=True 引數。
因此,說起來有點複雜:如果想讓日期欄位(如 DateField 、 TimeField 、 DateTimeField )或數值欄位(如IntegerField 、 DecimalField 、 FloatField )接受空值,要同時新增 null=True 和 blank=True 。
新增 null=True 比新增 blank=True 複雜,因為前者修改了資料庫的語義,即修改了 CREATE TABLE 語句,把publication_date 欄位的 NOT NULL 刪掉了。為了完成修改,我們要更新資料庫。
python manage.py migrate
自定義欄位的標註
email = models.EmailField(blank=True, verbose_name='e-mail')
自定義修改列表
return u'%s %s' % (self.first_name, self.last_name)
Author 物件的修改列表中顯示各個作者的名字和姓
列及搜做條件
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.contrib import admin
from books.models import *
# Register your models here.
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
search_fields = ('first_name', 'last_name')
admin.site.register(Publisher)
admin.site.register(Author,AuthorAdmin)
admin.site.register(Book)
原理如下:
• 定義 AuthorAdmin 類。它是 django.contrib.admin.ModelAdmin 的子類,存放指定模型在管理後臺中的自定義配置。我們只做了一項定製, list_display ,把它的值設為一個元組,指定要在修改列表頁面顯示的欄位名稱。當然,模型中必須有這些欄位。
• 修改 admin.site.register() 呼叫,在 Author 後面新增 AuthorAdmin 。你可以把這行程式碼理解為“以 Au-thorAdmin 中的選項註冊 Author 模型”。 admin.site.register() 函式的第二個引數可選,其值是一個ModelAdmin 子類。如果不指定第二個引數( Publisher 和 Book 模型就是這樣),Django 使用預設選項註冊模型。
修改之後,重新整理作者的修改列表頁面,你會看到現在顯示了三列:名字、姓和電子郵件地址。此外,點選這三列的表頭都可以排序各列
search_fields = ('first_name', 'last_name')
這是一個簡單的搜尋框,這個搜尋框不區分大小寫,而且兩個欄位都搜尋。
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
admin.site.register(Book,BookAdmin)
這一次定製的是另一個模型的選項,首先,定義list_display 屬性,讓修改列表好看一些。然後,為 list_filter 屬性賦值一個欄位元組,在修改列表頁面的右邊建立過濾器。Django 為日期欄位提供了幾個便利的過濾器:“Today”(今天)、“Past 7 days”(過去 7天)、“This month”(本月)和“This year”(本年)——這些是 Django 的開發者覺得過濾日期時最常用的。
新增一個導航欄
date_hierarchy = 'publication_date'
自定義編輯表單
class BookAdmin(admin.ModelAdmin):
fields = ('title', 'authors', 'publisher', 'publication_date')
fields = ('title', 'authors', 'publisher')
新增如下設定,可以改變表單的結構
raw_id_fields = ('publisher',)
System check identified no issues (0 silenced).
November 22, 2018 - 19:20:44
使用者、分組和許可權
• “Active”控制是否啟用使用者。如果未勾選,即便使用者使用有效的密碼也無法登入。
• “Staff status”控制是否允許使用者登入管理介面(即是否把使用者當做組織中的一員)。因為這個使用者系統也用於控制面向公眾的網站(即前臺,參見第 11 章),所以這個旗標對公開使用者和管理員是有區別的。
• “Superuser status”為使用者賦予所有許可權,可以在管理介面中新增、編輯和刪除任何物件。如果勾選,使用者的常規許可權(即使沒有)不再考慮。