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实现数组插入新元素的方法
May 22 Python
python从入门到精通(DAY 1)
Dec 20 Python
Python中对象迭代与反迭代的技巧总结
Sep 17 Python
详解TensorFlow查看ckpt中变量的几种方法
Jun 19 Python
python批量获取html内body内容的实例
Jan 02 Python
python多线程共享变量的使用和效率方法
Jul 16 Python
python对矩阵进行转置的2种处理方法
Jul 17 Python
python实现局域网内实时通信代码
Dec 22 Python
pytorch 修改预训练model实例
Jan 18 Python
使用Keras加载含有自定义层或函数的模型操作
Jun 10 Python
Python2.x与3​​.x版本有哪些区别
Jul 09 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 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
实用函数3
2007/11/08 PHP
PHP 引用是个坏习惯
2010/03/12 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
疯狂Jquery第一天(Jquery学习笔记)
2012/05/11 Javascript
Jquery选中或取消radio示例
2013/09/29 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
2016/12/14 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
Python合并多个Excel数据的方法
2018/07/16 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
python如何实时获取tcpdump输出
2020/09/16 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
美容院营销方案
2014/03/05 职场文书
四查四看自我剖析材料
2014/09/19 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
先进单位事迹材料
2014/12/25 职场文书
小学新教师个人总结
2015/02/05 职场文书
酒店辞职书范文
2015/02/26 职场文书
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers