zoukankan      html  css  js  c++  java
  • Django从Models 10分钟定制一个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]  # 嵌入订单条目内联表单
    

    完成!!!

    使用演示

    添加订单及订单条目

    订单列表

    注: 本次只简单实现了将模型注册到admin后台中,以实现通过admin后台对模型进行增删改查的基本功能, 其他定制功能/插件及admin页面定制, 没有涉及.
    如果想要实现这方面的功能可以自行百度或联系我: 微信 lockingfree

  • 相关阅读:
    linux定时器【转】
    Linux Timer定时器【转】
    Linux使用一个定时器实现设置任意数量定时器功能【转】
    Ubuntu 12.04将默认集成Landscape管理套件【转】
    【Linux系统编程应用】Linux音频编程基础(一)【转】
    CRT/LCD/VGA Information and Timing【转】
    记录自己对EventLoop和性能问题处理的一点心得【转】
    Linux下select&poll&epoll的实现原理(一)【转】
    MQTT--入门【转】
    RESTful 个人理解总结【转】
  • 原文地址:https://www.cnblogs.com/superhin/p/11454753.html
Copyright © 2011-2022 走看看