Django基于Models定制Admin后台实现过程解析


Posted in Python onNovember 11, 2020

简介

效果预览

Django基于Models定制Admin后台实现过程解析

Django自带一个Admin后台, 支持用户创建,权限配置和所有模型的增删改查功能, 只需要一些简单的配置就可快速得到一个开箱可用的后台管理系统

操作步骤

1. 更改设置,使用中文/亚洲时区

修改项目下django_shop目录下的settings.py文件
修改以下三行

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_L10N = False

添加以下两行, 已更改时间显示格式

DATETIME_FORMAT = 'Y年m月d日 H:i:s'
DATE_FORMAT = 'Y年m月d日'

2. 为Models提供中文显示名称和实例名称#

修改项目shop目录下的models.py, 为每个模型添加meta信息和__str__方法

from django.db import models

class Category(models.Model):
  ...

  class Meta:
    verbose_name_plural = verbose_name = "分类"  # 该模型在后台显示的名称

  def __str__(self):  # 该模型每一个实例显示其name
    return self.name

class Product(models.Model):
  ...

  class Meta:
    verbose_name_plural = verbose_name = "商品"

  def __str__(self):
    return self.name

class Order(models.Model):
  ...

  class Meta:
    verbose_name_plural = verbose_name = "订单"

  def __str__(self):
    return "{}的订单".format(self.username)

class OrderItem(models.Model):
  ...

  class Meta:
    verbose_name_plural = verbose_name = "订单条目"

  def __str__(self):
    return "{}订单条目".format(self.order)

3. 修改shop目录下的admin.py, 将模型注册到admin应用中

from django.contrib import admin
from .models import Category, Product, Order, OrderItem

admin.site.site_header = 'Django-Shop后台'
admin.site.site_title = 'Django-Shop后台'


class OrderItemInline(admin.TabularInline):  # 建立内联表单, 用于将订单条目内嵌入订单的表单中
  model = OrderItem


@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
  fields = ('name', 'slug')
  list_display = ('name', 'slug')
  list_filter = ('name', 'slug')


@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
  fields = ('name', 'slug', 'category', 'price', 'available', 'description') # 详情表单包含的字段, 支持嵌套分组(将一行展示)
  list_display = ('name', 'category', 'price', 'available', 'created', 'updated') # 列表显示字段
  list_filter = ('category', 'available')  # 列表筛选字段
  search_fields = ('name', ) # 列表可搜索字段
  list_editable = ('price', 'available') # 列表可编辑字段
@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
  fields = ('username', 'mobile', 'city', 'address', 'pay_status')
  list_display = ('username', 'mobile', 'city', 'pay_status', 'created', 'updated')
  list_filter = ('username', 'city', 'pay_status')
  search_fields = ('username', 'mobile')
  list_editable = ('pay_status', )
  inlines = [OrderItemInline] # 嵌入订单条目内联表单

完成!!!

使用演示

添加订单及订单条目

Django基于Models定制Admin后台实现过程解析

订单列表

Django基于Models定制Admin后台实现过程解析

注: 本次只简单实现了将模型注册到admin后台中,以实现通过admin后台对模型进行增删改查的基本功能, 其他定制功能/插件及admin页面定制, 没有涉及.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python解析xml文件操作实例
Oct 05 Python
用Python编写脚本使IE实现代理上网的教程
Apr 23 Python
Python 探针的实现原理
Apr 23 Python
Python算法之求n个节点不同二叉树个数
Oct 27 Python
对python 矩阵转置transpose的实例讲解
Apr 17 Python
Python使用matplotlib绘制三维图形示例
Aug 25 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
Python使用psutil获取进程信息的例子
Dec 17 Python
python读取Kafka实例
Dec 23 Python
tensorboard显示空白的解决
Feb 15 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
10张动图学会python循环与递归问题
Feb 06 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 #Python
Django启动时找不到mysqlclient问题解决方案
Nov 11 #Python
Python+logging输出到屏幕将log日志写入文件
Nov 11 #Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
Nov 11 #Python
Django自定义YamlField实现过程解析
Nov 11 #Python
Python监听剪切板实现方法代码实例
Nov 11 #Python
如何通过python计算圆周率PI
Nov 11 #Python
You might like
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
JavaScript创建命名空间的5种写法
2014/06/24 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
JAVASCRIPT keycode总结
2009/02/04 Javascript
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
script标签属性用type还是language
2015/01/21 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
老生常谈js动态添加事件--- 事件委托
2016/07/19 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
JS实现超级好看的鼠标小尾巴特效
2020/12/01 Javascript
[00:44]2016完美“圣”典 风云人物:Mikasa宣传片
2016/12/07 DOTA
python @property的用法及含义全面解析
2018/02/01 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
利用keras加载训练好的.H5文件,并实现预测图片
2020/01/24 Python
Windows下实现将Pascal VOC转化为TFRecords
2020/02/17 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
先进事迹报告会感言
2014/01/24 职场文书
新员工试用期自我鉴定
2014/04/17 职场文书
个人考核材料
2014/05/15 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
同学联谊会邀请函
2019/06/24 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
Oracle中日期的使用方法实例
2022/07/07 Oracle