Django Admin后台管理

2022-11-15 21:18:14 浏览数 (1)

Django通过简单配置就可以实现数据模型的后台管理。一般管理界面是给系统管理员使用的,以完成数据的CURD。

1.本地化

将语言和时区本地化,修改settings.py文件。

2.创建超级管理员

代码语言:javascript复制
python mange.py createsuperuser

3.注册模型类

登录后台管理后,默认没有任何模型类,需要在应用中的admin.py文件中注册,才可以在后台管理中看到,并进行增删改查操作。打开应用下的admin.py,注册模型类。

代码语言:javascript复制
from django.contrib import admin
from school_test.models import  SchoolInfo, StudentInfo

# Register your models here.
admin.site.register(SchoolInfo)
admin.site.register(StudentInfo)

启动本地服务器python manage.py runserver,在浏览器中输入http://127.0.0.1:8000/admin/

输入之前创建的超级管理员账号密码后,进行登陆。

登陆后就会看到我们注册的模型类,点进去后就可以实现对数据库的CURD了。

4.自定义管理页面

Django提供了自定义管理页面的功能,是通过自定义模型管理类来实现的。在admin.py创建一个admin.ModelAdmin的子类,在注册模型类时调用admin.site.register方法时,在第二个参数中指定自定义的模型管理类。

代码语言:javascript复制
from django.contrib import admin
from school_test.models import  SchoolInfo, StudentInfo

class SchoolInfoAdmin(admin.ModelAdmin):
    # 每页显示的数据量
    list_per_page = 10
    # 操作选项在顶部是否显示
    actions_on_top = True
    # 操作选项在底部是否显示
    actions_on_bottom = True

# Register your models here.
admin.site.register(SchoolInfo, SchoolInfoAdmin)
admin.site.register(StudentInfo)

显示效果如下

还可以通过模型管理类的list_display属性来自定义显示的列。

代码语言:javascript复制
from django.contrib import admin
from school_test.models import  SchoolInfo, StudentInfo

class SchoolInfoAdmin(admin.ModelAdmin):
    # 每页显示的数据量
    list_per_page = 10
    # 操作选项在顶部是否显示
    actions_on_top = True
    # 操作选项在底部是否显示
    actions_on_bottom = True
    # 自定义列表页显示的列表项
    list_display = ['id', 'name', 'addr']

# Register your models here.
admin.site.register(SchoolInfo, SchoolInfoAdmin)
admin.site.register(StudentInfo)

显示效果如下

list_display中的项可以是模型字段,也可以是模型方法(该方法必须有返回值)

修改应用下models.py中的SchoolInfo类

代码语言:javascript复制
# 学校模型类
class SchoolInfo(models.Model):
    name = models.CharField(max_length=20)
    addr = models.CharField(max_length=100)

    # objects指向自定义的管理类对象
    objects = SchoolInfoManager()

    # 用来说明对象的字符表达方式,
    # 如果在Python 2中,重写的是__unicode__方法
    def __str__(self):
        return self.name

    def get_name(self):
        return self.name

    # 给方法列指定排序依据
    get_name.admin_order_field = 'id'
    # 给列指定标题
    get_name.short_description = '学校'

然后在admin.py的list_display添加get_name方法

代码语言:javascript复制
list_display = ['id', 'name', 'addr', 'get_name']

显示效果如下

注:属性列在后台管理页面中是可以进行排序的,而方法列是不能排序的,如果需要排序需要设置admin_order_field属性来为方法指定排序依据。列标题默认是属性名或方法名,可以通过short_description属性设置。需要先将模型字段封装成方法,再对方法使用short_description属性,模型字段不能直接使用这个属性。但在模型类中为字段方法设置第一个参数verbose_name可以实现自定义标题,如ame = models.CharField(verbose_name='学校名', max_length=20)

右侧过滤器,会将对应字段的值列出来,用于快速过滤,通过list_filters属性设置。上方搜索框,用于对指定字段的值进行搜索,支持模糊查询,通过search_fields属性进行设置。

代码语言:javascript复制
class SchoolInfoAdmin(admin.ModelAdmin):
    # 每页显示的数据量
    list_per_page = 10
    # 操作选项在顶部是否显示
    actions_on_top = True
    # 操作选项在底部是否显示
    actions_on_bottom = True
    # 自定义列表页显示的列表项
    list_display = ['id', 'name', 'addr', 'get_name', 'get_student']
    # 右侧过滤器
    list_filter = ['name']
    # 搜索框
    search_fields = ['name']

效果如下。

5.其他

富文本编辑器

后台管理员如果需要在后台编辑带样式的文字,如编辑对商品的详细信息描述,就需要使用富文本编辑器。这里以tinymce为例在Django Admin后台中如何使用富文本编辑器。

安装tinymce

代码语言:javascript复制
pip install django-tinymce==2.6.0

在项目的settings.py中INSTALLED_APPS元组中加入’tinymce’

代码语言:javascript复制
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'tinymce',  # 富文本编辑器
)

在项目的settings.py最后位置添加tinymce的配置

代码语言:javascript复制
TINYMCE_DEFAULT_CONFIG = {
    'theme': 'advanced',
    'width': 600,
    'height': 400,
}

在项目的urls.py中配置编辑器url

代码语言:javascript复制
urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    ...,
    url(r'^tinymce/', include('tinymce.urls')),  # 富文本编辑器

随后就可在模型类中使用该字段,在应用的models.py中添加如下内容

代码语言:javascript复制
from django.db import models
from tinymce.models import HTMLField

class GoodsInfo(models.Model):
    gcontent = HTMLField()

再重新执行迁移,即可在Admin后台管理中使用富文本编辑器来编辑该字段。

笔者偷懒中,其他待之后补上 ~~~

本文作者: Ifan Tsai  (菜菜)

本文链接: https://cloud.tencent.com/developer/article/2164579

版权声明: 本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!

0 人点赞