开始今日份整理

1.admin组件使用

1.1 创建django项目以及开启APP01

1.2 创建类

使用django自带的sqlite3的小型文件型的数据库

注:使用sqlite3类型的数据库需要下载驱动

在app01.models创建类

from django.db import models

# Create your models here.

class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    pub_date = models.DateField()
    publish = models.ForeignKey('Publish', on_delete=models.CASCADE, null=True)
    # modeles.CASCADE设置串行,由于和出版社关联,在删除出版社的只会删除外键,不会删除对象,只有在null
    # 为True才可以删除。
    staes = models.IntegerField(choices=[(1,'已出版'),(2,'未出版')],default=1)
    author = models.ManyToManyField('Author')

    # 一对多关系

    def __str__(self):
        return self.title

class Publish(models.Model):
    # 出版社类
    name = models.CharField(max_length=32)
    city = models.CharField(max_length=32)
    email = models.EmailField()

    def __str__(self):
        return self.name

class Author(models.Model):
    # 作者类
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    au_detail = models.OneToOneField('Author_detail',on_delete=models.CASCADE,null=True)

    def __str__(self):
        return self.name

class Author_detail(models.Model):
    # 作者详情类
    tel = models.CharField(max_length=32)
    address = models.CharField(max_length=64)

使用manage.py文件创建数据表并写入到数据库中,同时创建超级用户

makemigrations:将库写入到内存中
migrate:将内存中的数据写入到数据库中

createsuperuser:创建超级用户,用于登陆admin页面

1.3 admin.py文件编辑

从app01.models中引入项目各个类

Django-CRM项目学习(一)-admin组件

在下面输入要创建的页面

admin.site.register(Book,BookConfig)
admin.site.register(Publish,PublishConfig)
admin.site.register(Author,AuthorConfig)
admin.site.register(Author_detail)

启动项目,在网页中打开,展示如下

Django-CRM项目学习(一)-admin组件

输入用户名密码,进入到展示页面

Django-CRM项目学习(一)-admin组件

1.4 默认显示

对于admin注册的默认显示内容如下,读取querset,如果有__str__属性,则显示__str__属性。

Django-CRM项目学习(一)-admin组件

1.5 自定义列表

根据上图,对数据页面上分别添加出版社,作者以及书籍

1.5.1 自定义展示列表

#创建一个自定义类
class BookConfig(admin.ModelAdmin):
    #用于展示多对多关系,展示书籍作者    
    # 用于展示
    list_display = ['title','price','pub_date','publish','show_authors','staes']


#在book相关admin中添加自定义类,BookConfig为新增
admin.site.register(Book,BookConfig)

上面的list_display为内置用法,用于显示,最后展示如下

Django-CRM项目学习(一)-admin组件

1.5.2 自定义展示多对多关系

书籍与作者的关系是多对多关系,需要自定义函数,用于展示!

#用于展示多对多关系,自定义函数show_authors,完整代码如下
class BookConfig(admin.ModelAdmin):
    def show_authors(self,obj):
        print("obj",obj)
        return '|'.join([obj.name for obj in obj.author.all()])

    # 用于展示
    list_display = ['title','price','pub_date','publish','show_authors',]

Django-CRM项目学习(一)-admin组件

多个作者用‘|’分隔。

1.5.3 反射字段

对于表中使用choices的属相,反射对应的字段

在models中如下设置

Django-CRM项目学习(一)-admin组件

Django-CRM项目学习(一)-admin组件

注:

  • django现在默认会将choice的对应的值转换对应的值,默认会显示为对应的出版社或者未出版社
  • obj.get_states_display()用于反射choiice对应的值

Django-CRM项目学习(一)-admin组件

1.6 批量操作

批量操作为action操作

在上面的BookConfig中写入

#action操作
    # 价格初始化
    def patch_init(self,request,queryset):
        print('queryset',queryset)
        queryset.update(price=0)
    patch_init.short_description = '价格初始化'#设置多选服务
    # 出版状态初始化
    def states_status(self,request,queryset):
        queryset.update(staes=2)
    states_status.short_description ='出版状态初始化'
    # 多选服务
    actions = [patch_init,states_status]


#其中.short_description以及actions为内置应用

展示如下

Django-CRM项目学习(一)-admin组件

1.7 多重过滤

在上面的BookConfig类中写入

#多重过滤
    list_filter = ['publish','author']

#对出版社以及作者做过滤

展示如下

Django-CRM项目学习(一)-admin组件

1.8 排序

在上面的BookConfig类中写入

# 排序
    ordering = ['price','-id']

#可以用俩个参数进行排序,默认是升序,加-号变为逆反

1.9 模糊查询

# 模糊查询
    search_fields = ['title','price']

#如果title以及价格中都有特定的参数那么都显示

展示如下

Django-CRM项目学习(一)-admin组件

admin整体代码

from django.contrib import admin

# Register your models here.

from app01.models import Book,Publish,Author,Author_detail

class BookConfig(admin.ModelAdmin):
    def show_authors(self,obj):
        print("obj",obj)
        return '|'.join([obj.name for obj in obj.author.all()])

    # 用于展示
    list_display = ['title','price','pub_date','publish','show_authors','staes']
    # 用于设置连接的内容
    list_display_links = ['title','price']

    #action操作
    # 价格初始化
    def patch_init(self,request,queryset):
        print('queryset',queryset)
        queryset.update(price=0)
    patch_init.short_description = '价格初始化'#设置多选服务
    # 出版状态初始化
    def states_status(self,request,queryset):
        queryset.update(staes=2)
    states_status.short_description ='出版状态初始化'
    # 多选服务
    actions = [patch_init,states_status]


    #多重过滤
    list_filter = ['publish','author']

    # 排序
    ordering = ['price','-id']

    # 模糊查询
    search_fields = ['title','price']


class PublishConfig(admin.ModelAdmin):
    list_display = ['name','city','email']


class AuthorConfig(admin.ModelAdmin):
    def show_tel(self,obj):
        print('obj',obj)
        return obj.au_detail.tel
    def show_address(self,obj):
        print('obj',obj)
        return obj.au_detail.address
    list_display = ['name','age','show_tel','show_address']

admin.site.register(Book,BookConfig)
admin.site.register(Publish,PublishConfig)
admin.site.register(Author,AuthorConfig)
admin.site.register(Author_detail)
admin整体代码

相关文章:

  • 2022-12-23
  • 2021-06-01
  • 2022-12-23
  • 2021-12-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-10
猜你喜欢
  • 2021-12-02
  • 2021-12-19
  • 2021-05-29
  • 2021-12-17
  • 2021-06-26
  • 2022-12-23
  • 2021-07-16
相关资源
相似解决方案