最近整理了一些關於Django admin後臺管理的資料
model:
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
# Create your models here.
class Post(models.Model):
STATUS_CHOICES = (('draft', 'Draft'), ('published', 'Published'))
title = models.CharField(max_length=250, verbose_name='文章標題')
# 通常在URL中使用。slug是一個短的字符串,只能包含字母,數字,下劃線和減號。將使用slug字段構成優美的URL,也方便搜索引擎搜索
# unique_for_date參數表示不允許兩條記錄的publish字段日期和title字段全都相同,這樣就可以使用文章發佈的日期與slug字段共同生成一個唯一的URL標識該文章。
slug = models.SlugField(max_length=250, unique_for_date='publish', verbose_name='url')
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts', verbose_name='作者')
body = models.TextField()
# 自帶datetime.now()
publish = models.DateTimeField(default=timezone.now(), verbose_name='時間')
# auto_now_add表示當創建一行數據的時候,自動用創建數據的時間填充
created = models.DateTimeField(auto_now_add=True, verbose_name='創建時間')
# auto_now表示每次更新數據的時候,都會用當前的時間填充該字段
updated = models.DateTimeField(auto_now=True, verbose_name='更新時間')
# choices參數,所以這個字段的值只能爲一系列選項中的值。
status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')
class Meta:
# 指定了Django在進行數據庫查詢的時候,默認按照發布時間的逆序將查詢結果排序。
# 逆序通過加在字段名前的減號表示。這樣最近發佈的文章就會排在前邊。
ordering = ('-publish',)
# __str__()方法是Python類的功能,供顯示給人閱讀的信息,這裏將其設置爲文章的標題。
# Django在很多地方比如管理後臺中都調用該方法顯示對象信息。
def __str__(self):
return self.title
爲Post模型遷移數據,blog爲app名稱,可以不寫,那麼就會給所有項目遷移數據庫
遷移:
python manage.py makemigrations blog
查看生成的SQL語句,0001是我們執行上面的命令會在blog應用下的migrations目錄裏新增一個0001_initial.py文件,裏面包含了一個遷移數據文件裏包含了與其他遷移數據的依賴關係,以及實際要對數據庫執行的操作。
python manage.py sqlmigrate blog 0001
然後來讓數據庫與新的數據模型進行同步
python manage.py migrate
接着就會看到控制檯輸出:
Applying blog.0001_initial... OK
如果要使用後臺管理,就需要先註冊一個超級用戶
python manage.py createsuperuser
然後會看到以下輸出
Username (leave blank to use 'admin'): admin
Email address: [email protected]
Password: ********
Password (again): ********
Superuser created successfully.
啓動項目
python manage.py runserver
打開 http://127.0.0.1:8000/admin/
輸入用戶名密碼登錄
向管理後臺添加模型
from django.contrib import admin
from .models import Post
# Register your models here.
admin.site.register(Post)
每當在管理後臺中註冊一個模型,就能迅速在管理後臺中看到它,還可以對其進行增刪改查
我們點擊增加
我們新增數據,點擊保存後
我們能在這看到這個: title: 今天是個開心的日子, 是因爲我們model中寫了
def __str__(self): return self.title
然後我們想顯示更多字段怎麼辦,當然可以接着在return後面寫,但是有一種更好的方法,在admin.py中寫
from django.contrib import admin
from .models import Post
# Register your models here.
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status',)
admin.site.register(Post, PostAdmin)
register也可以這樣寫:兩種方法都可以
from django.contrib import admin
from .models import Post
# Register your models here.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
然後我們會看到後臺中這樣顯示
可以看到在該頁面上顯示的字段就是list_display
中的字段
增加 list_filter = ('status', 'created', 'publish', 'author',)
from django.contrib import admin
from .models import Post
# Register your models here.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status',)
list_filter = ('status', 'created', 'publish', 'author',)
頁面出現了一個右側邊欄用於篩選結果,這個功能由list_filter
屬性控制
增加 search_fields = ('title', 'body',)
from django.contrib import admin
from .models import Post
# Register your models here.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status',)
list_filter = ('status', 'created', 'publish', 'author',)
search_fields = ('title', 'body',)
頁面上方出現了一個搜索欄,這是因爲在search_fields
中定義了可搜索的字段
增加 prepopulated_fields = {'slug': ('title',)}
from django.contrib import admin
from .models import Post
# Register your models here.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status',)
list_filter = ('status', 'created', 'publish', 'author',)
search_fields = ('title', 'body',)
prepopulated_fields = {'slug': ('title',)}
這個時候點擊Add Post,可以發現也有變化。當輸入文章標題時,slug
字段會根據標題自動填充,這是因爲設置了prepopulated_fields
屬性中slug
字段與title
字段的對應關係。
增加 raw_id_fields = ('author',)
from django.contrib import admin
from .models import Post
# Register your models here.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status',)
list_filter = ('status', 'created', 'publish', 'author',)
search_fields = ('title', 'body',)
prepopulated_fields = {'slug': ('title',)}
raw_id_fields = ('author',)
作者字段旁邊出現了一個搜索圖標,並且可以按照ID來查找和顯示作者,如果在用戶數量很大的時候,這就方便太多了。
增加 date_hierarchy = 'publish'
from django.contrib import admin
from .models import Post
# Register your models here.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status',)
list_filter = ('status', 'created', 'publish', 'author',)
search_fields = ('title', 'body',)
prepopulated_fields = {'slug': ('title',)}
raw_id_fields = ('author',)
date_hierarchy = 'publish'
在搜索欄的下方,出現了時間層級導航條
增加 ordering = ('status', 'publish',)
from django.contrib import admin
from .models import Post
# Register your models here.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'slug', 'author', 'publish', 'status',)
list_filter = ('status', 'created', 'publish', 'author',)
search_fields = ('title', 'body',)
prepopulated_fields = {'slug': ('title',)}
raw_id_fields = ('author',)
date_hierarchy = 'publish'
ordering = ('status', 'publish',)
默認通過Status和Publish字段進行排序
以上就是admin後臺中的一些配置了