18、Django-admin管理后台-Meta类

1、先执行数据库迁移
  -- python manage.py makemigrations
  -- python manage.py migrate

2、在cmd终端先创建管理员账户
  -- python manage.py createsuperuser


3、登录
  -- http://127.0.0.1:8000/admin/

 

 注册自定义的模型类

若要自己定义的模型类也能在/admin后台管理界面中显示和管理、需要将自己的类注册到后台管理界面

注册步骤:
  -- 1、在应用app中的admin.py中导入注册要管理的模型models类、如:
    -- from .models import Book

  -- 2、调用 admin.site.register 方法进行注册,如:
    -- admin.site.register(自定义模型类-在models.py中的类)
    
    3、此时admin后台就有此模型类了

 

模型管理器类:

-- 为admin后台界面添加便于操作的新功能
-- 后台管理器类必须继承:django.contrib.admin里的ModelAdmin类 

使用方法:
1、在admin.py中添加class模型管理器类
class XXXXManager(admin.ModelAdmin):
         pass

2、绑定注册模型管理器和模型类
from django.contrib import admin
from .models import *

admin.site.register(YYYY, XXXXManager)    #绑定YYYY模型类与管理器类XXXXManager

 

案例

models.py

from django.db import models

class Book(models.Model):   #表名
    # 字段 = 数据库字段的属性
    title = models.CharField(verbose_name='书名', max_length=100, default='', unique=True)
    pub = models.CharField(verbose_name='出版社', max_length=100, default='')
    price = models.DecimalField(verbose_name='价格', max_digits=7, decimal_places=2)
    market_price = models.DecimalField(verbose_name='市场价', max_digits=7, decimal_places=2, default=0)
    is_active = models.BooleanField(verbose_name='是否上架', default=True)   #伪删除

    # Meta类、一定要在模型类中定义
    class Meta:
        db_table = 'book'  # 表名 、将系统默认的表名改为 book

    # 模型类的方法定义、显示输出可视化的属性-如标题、价格等字段显示出来
    def __str__(self):
        return f"{self.title} - {self.price} - {self.pub} - {self.market_price}"

class Author(models.Model):
    name = models.CharField('作者', max_length=100)
    age = models.IntegerField('年龄', default=1)
    email = models.EmailField('邮箱', null=True)


    class Meta:
        db_table = 'author'

    # 模型类的方法定义、显示输出可视化的属性-如标题、价格等字段显示出来
    def __str__(self):
        return f"{self.name} - {self.age} - {self.email}"

views.py

views.py
-----------------------------------------------------------------------------------
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from admin_app.models import *


#插入数据到book模型
def index(request):
     book1 = Book.objects.create(title='python', pub='oreilly', price=100, market_price=200)
     book2 = Book.objects.create(title='java', pub='oreilly', price=100, market_price=200)
     book3 = Book.objects.create(title='c++', pub='oreilly', price=100, market_price=200)
     book4 = Book.objects.create(title='c', pub='清华大学出版社', price=100, market_price=200)
     book5 = Book.objects.create(title='c#', pub='oreilly', price=100, market_price=200)
     book6 = Book.objects.create(title='php', pub='oreilly', price=100, market_price=200)
     book7 = Book.objects.create(title='go', pub='oreilly', price=100, market_price=200)

    #插入作者数据
     author1 = Author.objects.create(name='zhangsan', age=18, email='303977142@qq.com')
     author2 = Author.objects.create(name='lisi', age=20, email='303977142@qq.com')
     author3 = Author.objects.create(name='wangwu', age=22, email='303977142@qq.com')
     author4 = Author.objects.create(name='zhaoliu', age=24, email='303977142@qq.com')
     author5 = Author.objects.create(name='qianqi', age=26,email='303977142@qq.com')

     return HttpResponse('插入作者数据成功')

urls.py

urls.py
---------------------------------------------------------------
from django.contrib import admin
from django.urls import path
from admin_app import views

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

 

admin.py
---------------------------------------------------------------------------------------------------
from django.contrib import admin
from .models import Book


# # 注册
# admin.site.register(Book)


class BookManager(admin.ModelAdmin):
    from django.contrib import admin
from .models import Book


# # 注册
# admin.site.register(Book)


class BookManager(admin.ModelAdmin):

    #参考链接:https://docs.djangoproject.com/en/2.2/ref/contrib/admin
    # 列表页显示字段
    list_display = ['id', 'title', 'pub', 'price', 'market_price', 'is_active']
    # 列表页显示字段的链接、超链接-点击title可以跳到修改页面
    list_display_links = ['title']
    # 列表页显示字段的过滤器-筛选-类似分类查询
    list_filter = ['pub']
    # 列表页显示字段的搜索框-模糊查询-输入关键字title进行搜索
    search_fields = ['title']
    #添加在列表页可编辑的字段-price字段在页面可以直接编辑
    list_editable = ['price']
    # 列表页显示字段的排序-排序
    ordering = ['id']
    # 列表页显示字段的分页-分页-每页显示2条信息
    list_per_page = 10


# 注册、将模型类绑定模型管理类
admin.site.register(Book, BookManager)

# 注册、将模型类绑定模型管理类
admin.site.register(Book, BookManager)

 

Meta类

# Meta类、一定要在模型类中定义
    class Meta:
        db_table = 'book'  # 表名 、将系统默认的表名改为 book
        # 模型类的名称 -用户显示在admin后台的
       # verbose_name = '图书'     #一般这个是复数形态 名称后面会有个 s
        verbose_name_plural = '图书'  # 一般这个是单数形态

posted @ 2024-07-09 22:32  little小新  阅读(14)  评论(0编辑  收藏  举报