首页 > 其他分享 >18、Django-admin管理后台-Meta类

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

时间:2024-07-09 22:45:03浏览次数:16  
标签:name title admin 18 price Django models Book

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='[email protected]')
     author2 = Author.objects.create(name='lisi', age=20, email='[email protected]')
     author3 = Author.objects.create(name='wangwu', age=22, email='[email protected]')
     author4 = Author.objects.create(name='zhaoliu', age=24, email='[email protected]')
     author5 = Author.objects.create(name='qianqi', age=26,email='[email protected]')

     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 = '图书'  # 一般这个是单数形态

标签:name,title,admin,18,price,Django,models,Book
From: https://www.cnblogs.com/littlecc/p/18178516

相关文章

  • 17、Django-聚合查询-原生sql语句操作raw()
    聚合查询:整表聚合和分组聚合 1、整表聚合--不带分组的聚合查询是指:将全部数据进行集中统计查询--需要导入:--fromdjango.db.modelsimport*--聚合函数:Sum,Avg,Count,Max,Min--语法:--<model_name>.objects.aggregate(结果变量名=聚合函数('字段名'))......
  • 26、Django内建用户系统
    官方文档:https://docs.djangoproject.com/en/2.2/topics/auth 基本字段模型类位置:--fromdjango.contrib.auth.modelsimportUser   ......
  • 25、Django-生成csv文件
    python提供了内建库-csv、可以直接通过改库操作csv文件案例如下:写入csv文件importcsvwithopen('eggs.csv','w',newline='')ascsvfile:write=csv.writer(csvfile)write.writerow(['a','b','c']) #csv文件下载在网站中......
  • 24、Django-网站分页功能-Pagintor类
    -Django提供了Paginator类可以方便的实现分页功能-Painator类位于django.core.pagintor模块中负责分页数据整体的管理对象的构造方法:paginator=Paginator(object_list,per_page)-参数:-object_list:需要分页的数据的对象列表-数据的个数-......
  • 23、Django-CSRF跨站伪造请求攻击
     配置:1、在settings.py中确认MIDDLEWARE中确保--django.middleware.csrf.CsrfViewMiddleware打开2、在模板中、form标签下添加如下标签:--{%csrf_token%}#这个就是页面中的暗号 案例views.py-------------------------------------------------......
  • 22、Django-中间件-Middleware
    1、中间件是Django请求/响应处理的钩子框架、他是一个轻量级的、低级的“插件”系统,用于全局改变Django的输入或输出2、中间件以类的形式体现3、每个中间件组件负责做一些特定的功能、例如:Django包含一个中间件组件AuthentucationMiddleware、它使用会话将用户与请求关联起来......
  • 29、Django-uWSGI项目部署
    WSGI(WebServerGatewayInterface)Web服务器网关接口、是Python应用程序或框架和Web服务器之间的一种接口、被广泛使用使用pythonmanage.pyrunserver通常只是再开发测试环境中使用当开发结束后、完善的项目代码需要在一个高效稳定的环境中运行、这时可以使用WSGI这里WSGI......
  • 28、Django-发送邮件
    SMTP全称是(SimpleMailTransferProtocol)即简单邮件传输协议(端口是25)-他是一组用于从源地址到目的地址传输邮件的规范、通过它来控制邮件的中转-属于推送协议-负责发送IMAP-邮件相关协议(InternetMailAccessProtocol)即交互式邮件访问协议、是一个应用层协议、端口是143-用来从本地邮件客户端(OutlookExporess、Foxmail、MzzillaThunderbird)访问远程服务......
  • 27、Django-文件上传
    上传规范:1、文件上传必须为POST提交方式2、表单'<form>'中文件上传时必须带有enctype="multipart/form-data"时才会有包含文件内容的数据3、表单中用<inputtype="file"name="xxx">标签上传文件#在视图函数中-用request.FILES取文件框的内容-file=request.FILES['xxx......
  • 30、Django-项目部署-nginx
     原理: 安装: 配置:-这里uwsgi_pass表示使用uwsgi协议转发代理-include表示加载uwsgi协议的参数(固定)-nginx-t  #检查配置文件语法  修改uWSGI:  socket表示启用uwsgi协议      ......