首页 > 其他分享 >13.django-admin组件

13.django-admin组件

时间:2022-11-18 14:15:15浏览次数:82  
标签:13 verbose admin django models True name

Django内置了一个强大的组件叫Admin,提供给网站管理员快速开发运营后台的管理站点,下面通过案例进行操作

1.创建模型类

模型类如下:

from django.db import models


# Create your models here.


class Classes(models.Model):
    """ 班级表 """
    title = models.CharField(max_length=32, verbose_name='班级名称')

    def __str__(self):
        return self.title


class Students(models.Model):
    """ 学生表 """
    username = models.CharField(max_length=128, default=None, null=True, verbose_name='学生姓名')
    mobile = models.CharField(max_length=32, null=True, unique=True, verbose_name='手机号', help_text='手机号')
    wxchat = models.CharField(max_length=100, null=True, unique=True, verbose_name='微信', help_text='微信')
    qq_number = models.CharField(max_length=16, null=True, unique=True, verbose_name='QQ', help_text='QQ')
    nickname = models.CharField(max_length=128, default=None, null=True, verbose_name='昵称')
    age = models.SmallIntegerField(verbose_name='年龄')
    email = models.CharField(max_length=128, default=None, null=True, verbose_name='邮箱')
    en_date = models.DateField(verbose_name='入学日期')
    addr = models.CharField(max_length=32, default=None, null=True, verbose_name='地址')
    to_classes = models.ForeignKey('Classes', default=1, verbose_name='所属班级', on_delete=models.CASCADE)

    def __str__(self):
        return self.username

生成数据库表

 python manage.py makemigrations
python manage.py migrate

 

2. 使用脚本生成测试数据

在项目根目录下创建test.py脚本如下:

import os
import django
import random
import faker  # pip install faker

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "adminStudy.settings")  # MB:项目名称
django.setup()

from student import models

fk = faker.Faker(locale='zh_CN')


def create():
    models.Classes.objects.bulk_create((models.Classes(i, random.randrange(100, 500)) for i in range(10)))
    gen = (
        models.Students(
            i,
            fk.name(),
            fk.phone_number(),
            fk.phone_number(),
            fk.phone_number(),
            fk.user_name(),
            random.randrange(15, 20),
            fk.email(),
            fk.date(),
            fk.city_name(),
            random.randrange(0, 9)
        ) for i in range(1, 1001)
    )
    models.Students.objects.bulk_create(gen)


if __name__ == '__main__':
    create()

 

3. 创建超级管理员

命令

python manage.py createsuperuser   # 创建管理员命令

 

 

 

4. 使用管理员登录

django项目默认帮助我们生成管理员登录路由了

urlpatterns = [
    path('admin/', admin.site.urls),
]

我们在浏览器中输入地址

http://127.0.0.1:8080/admin/login/

登录页面如下

 

 

 使用用户名和密码登录,页面如下

 

 

 

5.将我们的模型类纳入admin管理

在子项目的admin中写入如下代码

from django.contrib import admin
from student import models


class StudentModelAdmin(admin.ModelAdmin):  # 必须继承 admin.ModelAdmin
    pass

@admin.register(models.Classes)  # 或者使用装饰器进行注册
class ClassesModelAdmin(admin.ModelAdmin):
    pass

再次访问页面如下

 

 

 

 

 

 

 6.中文显示

我们希望将系统语言,项目名称和表名称都换成指定中文

  • 系统语言,设置settings.py
    # LANGUAGE_CODE = 'en-us'
    LANGUAGE_CODE = 'zh-hans'

     

  • 项目名称,设置子项目的apps.py文件
    from django.apps import AppConfig
    
    
    class StudentConfig(AppConfig):
        default_auto_field = 'django.db.models.BigAutoField'
        name = 'student'
        verbose_name = "学生信息管理"
  • 表名称,设置模型类如下
    from django.db import models
    
    
    # Create your models here.
    
    
    class Classes(models.Model):
        """ 班级表 """
        title = models.CharField(max_length=32, verbose_name='班级名称')
    
        def __str__(self):
            return self.title
    
        class Meta:
            verbose_name = '班级'
            verbose_name_plural = '班级'
    
    
    class Students(models.Model):
        """ 学生表 """
        username = models.CharField(max_length=128, default=None, null=True, verbose_name='学生姓名')
        mobile = models.CharField(max_length=32, null=True, unique=True, verbose_name='手机号', help_text='手机号')
        wxchat = models.CharField(max_length=100, null=True, unique=True, verbose_name='微信', help_text='微信')
        qq_number = models.CharField(max_length=16, null=True, unique=True, verbose_name='QQ', help_text='QQ')
        nickname = models.CharField(max_length=128, default=None, null=True, verbose_name='昵称')
        age = models.SmallIntegerField(verbose_name='年龄')
        email = models.CharField(max_length=128, default=None, null=True, verbose_name='邮箱')
        en_date = models.DateField(verbose_name='入学日期')
        addr = models.CharField(max_length=32, default=None, null=True, verbose_name='地址')
        to_classes = models.ForeignKey('Classes', default=1, verbose_name='所属班级', on_delete=models.CASCADE)
    
        def __str__(self):
            return self.username
    
        class Meta:
            verbose_name = '学生'
            verbose_name_plural = '学生'

     

此时页面如下

 

 

 7.表显设置

我们可以很大程度上自定义设置页面显示内容,官网:https://docs.djangoproject.com/en/2.1/ref/contrib/admin/

一开始,学生表的显示如下,非常单调且不友好

 

 

 

完善如下:

添加班级时,可以通过设置inlines字段同时为该班级添加一些学生,因为学生表ForeignKey的班级表。

actions即在列表页,可操作的一些功能,它默认实现了一个删除操作:

 1 from django.contrib import admin
 2 from student import models
 3 
 4 
 5 class StudentModelAdmin(admin.ModelAdmin):  # 必须继承 admin.ModelAdmin
 6     """ 用户模型管理类,用于在admin后台对Students模型类进行扩展 """
 7     list_per_page = 20  # 列表页每页展示数据的条数控制
 8     # 在列表页展示哪些字段
 9     list_display = ['id', 'username', 'age', 'email', 'mobile', 'nickname', 'to_classes']
10     # 设置点击指定字段跳转到编辑页面
11     list_display_links = ['id', 'username', 'age']
12     # 默认是以id进行排序,你也可以通过ordering,设置指定字段排序
13     # ordering = ['-age']  # ['age']: 升序; ['-age']: 降序
14     ordering = ['-age', 'id']  # 年龄相同的,就按照id升序排序
15     actions_on_top = True     # 上方操作栏是否显示,False表示隐藏
16     # actions_on_bottom = True  # 下方操作栏是否显示,False表示隐藏
17     list_filter = ['to_classes', 'age', 'en_date']  # 过滤器,按指定字段进行筛选过滤, 可以写多个过滤器,在右侧展示
18     search_fields = ['username', 'nickname']  # 指定字段搜索
19     # 注意,要编辑的字段必须在list_display中,但是也必须不在list_display_links中
20     # list_editable = ['email', 'mobile']
21     # date_hierarchy = "en_date"  # 按照入学时间不同,可以进行过滤,在上方展示,这个筛选必须是日期时间相关的字段
22 
23     def my_edit(self, request, queryset):
24         """ 将选中的记录,年龄设置为10 """
25         print(request.POST.getlist("_selected_action"))  # ['5', '12']
26         pk_list = request.POST.getlist("_selected_action")
27         models.Students.objects.filter(pk__in=pk_list).update(age=10)
28 
29     my_edit.short_description = "自定义编辑功能"
30 
31     def my_edit2(self, request, queryset):
32         """ 将选中的记录,年龄设置为10 """
33         print(request.POST.getlist("_selected_action"))  # ['5', '12']
34         pk_list = request.POST.getlist("_selected_action")
35         models.Students.objects.filter(pk__in=pk_list).update(age=10)
36 
37     my_edit.short_description = "自定义编辑功能2"
38     actions = [my_edit,my_edit2]
39 admin.site.register(models.Students, StudentModelAdmin)  # 必须进行注册
40 
41 
42 @admin.register(models.Classes)  # 或者使用装饰器进行注册
43 class ClassesModelAdmin(admin.ModelAdmin):
44     class StudentInline(admin.StackedInline):  # 必须这么继承,当然这个类也可以写在ClassesModelAdmin外面
45         """
46         这两个就样式不同而已
47             admin.StackedInline: 竖着
48             admin.TabularInline: 横着
49         """
50         extra = 1  # 默认一次性添加几条记录
51         model = models.Students
52 
53     inlines = [StudentInline]

显示效果

 

 

 

 

 

8.simple-ui:美化页面

详细请见:https://simpleui.72wo.com/docs/simpleui/

安装:

pip install django-simpleui

配置

  INSTALLED_APPS = [
      'simpleui',
      'django.contrib.admin',
      'django.contrib.auth',
      'django.contrib.contenttypes',
      'django.contrib.sessions',
      'django.contrib.messages',
      'django.contrib.staticfiles',
      ...
  ]

 

页面如下

 

标签:13,verbose,admin,django,models,True,name
From: https://www.cnblogs.com/victor1234/p/16902211.html

相关文章

  • 20201302姬正坤第十四章学习笔记
    Linux系统编程第十四章——MySQL数据库系统SQL简述.SQL的概述StructureQueryLanguage(结构化查询语言)简称SQL,它被美国国家标准局(ANSI)确定为关系型数据库语言的美......
  • iOS 升级到XCode13以后运行模拟器经常导致MacOS系统卡死
    升级到XCode13后运行模拟器会导致MacOS系统卡死,升级到XCode14后,该问题仍然存在,当然也有可能是公司办公电脑配置太低导致的[dog],卡死频率很高,会导致整个屏幕无法操作,无法看......
  • 自定义django admin Action
    https://blog.csdn.net/anbuqi/article/details/100810993 自定义djangoadminAction 文章目录自定义djangoadminAction简介Adminactions简介编写Admin......
  • Django用nginx运行
    1、运行pythonmanage.pyrunserver10.0.0.168:80002、下载和配置nginx下载地址​​​http://nginx.org/download​​我的django2.0.9用nginx-1.10.3.zip下载完后解压,配......
  • Django-写第一个页面
    Django-写第一个页面文件结构进入到/acapp/game下新建urls.py和templages/touchurls.pymkdirtemplates之后写项目基本上就只在urls.py、models.py、views.py、te......
  • Django-配置docker、git环境与项目创建
    Django-配置docker、git环境与项目创建django官方社区django官方文档acwingDjango课学习笔记Django项目笔记前提租好了云服务器,并配置好了免密登录我的云服务器免密......
  • Django model 中的 class Meta 详解
    通过一个内嵌类"classMeta"给你的model定义元数据classCourseCategory(BaseModel):name=models.CharField(max_length=64,unique=True,verbose_name='分类名......
  • phpmyadmin 数据库导出数据到excel(图文版)
    查询到想要的数据后,点击上方或下方的“导出”按钮格式选择“CSVforMSExcel” 如果快速导出的数据乱码,可以选择“导出方式”->“自定义-显示所有可用的选项”。......
  • Oracle 练习题 20131021 for 循环练习
    --Oracle练习题20131021for循环练习--1、用for循环实现一个倒置的乘法表。begin foriinreverse1..9loop  forjinrever......
  • Oracle 练习P297 131026 PL/SQL块程序
    --1、编写一个PL/SQL块,输出所有员工的员工姓名,员工号、工资和部门号。begin forv_empin(select*fromemp)loop  dbms_output.put('员工......