Django之admin实战示例详解(其他篇一)

版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/Burgess_zheng/article/details/86663287

上一篇:Django之Form及ModelForm目录篇 点击跳转
下一篇:Django之时间区问题(其他篇二)点击跳转

目录


admin简单介绍

Django的admin内容管理页面是基于modelform实现的,虽然非常强大,但是admin有一个缺点就是权限问题,权限为表级别的,y也就是无法细节表的行数据增删改权限(举例:A用户在A表增加的数据,B用户如果有该A表的权限,那么自然就可以删除A用户增加的数据,我们都知道,就拿CSDN该博客网站,我们写的文章肯定只有我们才可以删除,我们是无法删除别的用户的文章),如果Django的权限不能满足我们就需要自主开发一个通用内容管理页面组件和一个通用的权限组件,这是后事,让我们先来体验admin管理页面强大的功能

1.创建Django项目

Django之创建项目【二】:https://blog.csdn.net/Burgess_zheng/article/details/86505526

2.创建app(并且app目录下创建一个urls.py文件)

进入项目目录下
创建app命令:
       F:\Burgess\Python\pycharm实验脚本\test\project_burgess>python manage.py startapp modes_handle

3.settings注册app

路径:project_burgess/project_burgess/setting

4.建表操作

路径:project_burgess/models_handle/models.py

from django.db import models

class UserType(models.Model):
    name = models.CharField(max_length=10)

    def __str__(self):
        return self.name

class M2M(models.Model):
    name = models.CharField(max_length=32)
    def __str__(self):
        return self.name

class User(models.Model):
    name = models.CharField(max_length=32)
    email = models.EmailField(max_length=32)
    user_type = models.ForeignKey('UserType',on_delete=models.CASCADE)  # 一对多
    m = models.ManyToManyField('M2M')
    ctime = models.DateTimeField(auto_now_add=True,null=True)

5.admin进行注册model表

路径:project_burgess/models_handle/admin.py

from django.contrib import admin
from modes_handle import models
# Register your models here.

admin.site.register(models.User)
admin.site.register(models.UserType)
admin.site.register(models.M2M)

6.创建admin超级用户

7.启动Django该程序

手动:python manage.py runserver 127.0.0.1:8000

pycharm:

 

8.登录Django的admin 管理页面

9.开始进行admin页面介绍和操作

表名和表字段变中文

路径:project_burgess/models_handle/models.py

刷新管理页面

点击进入用户表

显示对象,不好看,我们可以显示该表的name字段值

路径:project_burgess/models_handle/models.py

刷新管理页面

点击添加数据ADD USER

点击小D进入编辑删除页面

点击Delete

点击YES

想要进行自定义字段过滤,根据指定字段搜索,多字段排序,页码显示数据的数量,选择某行数据,可以进行指定自定制的函数对该数据进行有效操作,指定字段不可编辑,多对多字段进行框对框的移动数据效果

路径:project_burgess/models_handle/admin.py

from django.contrib import admin
from modes_handle import models
# Register your models here.
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin



class User_Admin(admin.ModelAdmin):
    """
       list_display:admin页面对表指定字段进行显示
       list_filter : admin页面对指定字段进行过滤
       search_fields : admin页面进行搜索,只在指定字段内搜索(范围搜索)
       list_per_page :admin分页功能,指定每页显示几条数据
       readonly_fields: admin页面指定字段不可更改
       filter_horizontal: admin数据下多对多字段可以进行多选增加(框对框效果)
       action:执行对应的函数
       """
    list_display = ['name', 'email', 'user_type', 'ctime']
    list_filter = ['ctime', 'user_type',]
    search_fields = ['name',]
    # 如果是另外一张表,我们要详细到另外一张表的字段名,否则报错
    # 也就是使用admin搜索输入只会在该表的cantact字段和userprofile关联表的name字典进行搜索
    readonly_fields = ['ctime',]  # 指定字段不可更改
    list_per_page = 5  # 每页显示100个数据
    filter_horizontal = ['m',]  # consult_courses(多对多字段)

    actions = ['change_status', ]

    def change_status(self, request, querysets):  # 自定制的action必须3个形参
        querysets.update(user_type=2)  # 传进来的对象修改status字段=1


admin.site.register(models.User,User_Admin) #注册该User_Admin
admin.site.register(models.UserType)
admin.site.register(models.M2M)

刷新管理页面

随便点击进入一行数据

我们选择小A和小B进行执行我们自定义函数Cange status修改类型为2

点击go

进入类型表

进入类型1

我想要在该页面显示关联我的表(我们user表有字段关联了该usertype表,所以把user表嵌套进入该页面)

路径:project_burgess/models_handle/admin.py

刷新页面

10.DJANGO的权限设置

点击django自带的Groups表

创建了一个sales的组,权限其实很简单,就是对Django内置的表和我们的表授权增删改这四个权限,不权限等于拥有所有表的权限,前面我们已经说过了权限最多到表层级,表内数据权限是无法涉及的

点击django自带的User表

上面就应该足够用了,其他的请参照汇总的参数自定义:https://blog.csdn.net/Burgess_zheng/article/details/86627408

上一篇:Django之Form及ModelForm目录篇 点击跳转
下一篇:Django之时间区问题(其他篇二)​​​​​​​点击跳转

猜你喜欢

转载自blog.csdn.net/Burgess_zheng/article/details/86663287