1. 程式人生 > >Django第六篇-----如何用Django管理後臺

Django第六篇-----如何用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”為使用者賦予所有許可權,可以在管理介面中新增、編輯和刪除任何物件。如果勾選,使用者的常規許可權(即使沒有)不再考慮。