最近整理了一些关于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后台中的一些配置了