当前位置: 首页 > news >正文

Django-admin管理工具

Django.contrib 

 Django提供了基于web的管理工具

  Django自动管理工具是Django.contrib的一部分,你可以在项目的settings.py中的INSTALLED_APPS看到它:

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
]

  Django.contrib是一套庞大的功能集,它是Django基本代码的组成部分

激活管理工具

  通常我们在生成项目时会在url.py中自动设置好,当这些配置好后,Django管理工具就可以运行了

from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

使用管理工具

  启动开发服务器,然后在浏览器中访问http://127.0.0.1:8000/admin/,得到登录界面,可以通过命令python manage.py createsuperuser来创建超级用户。为了让admin界面管理某个数据模型,我们需要先注册该数据模型到admin

from django.db import models

# Create your models here.
class Author(models.Model):

    name=models.CharField( max_length=32)
    age=models.IntegerField()


    def __str__(self):
        return self.name

class Publish(models.Model):

    name=models.CharField( max_length=32)
    email=models.EmailField()

    def __str__(self):
        return self.name


class Book(models.Model):

    title = models.CharField( max_length=32)
    publishDate=models.DateField()
    price=models.DecimalField(max_digits=5,decimal_places=2)

    publisher=models.ForeignKey(to="Publish")
    authors=models.ManyToManyField(to='Author')

    def __str__(self):
        return self.title
models

  admin.py

from django.contrib import admin
from app01 import models

# Register your models here.

admin.site.register(models.Book)
admin.site.register(models.Author)
admin.site.register(models.Publish)

admin的定制 

  在admin.py中只需要将model中某个类注册,即可在Admin中实现增删改查的功能,但是这种方式比较简单,如果想要进行更多的定制操作,需要利用ModelAdmin

   定制的两种方法

from django.contrib import admin
from app01.models import *

# 方式一
@admin.register(Book)
class Bookconfig(admin.ModelAdmin):
    list_display = ['title','price']

# 方式二
class Bookconfig1(admin.ModelAdmin):
    list_display = ['title','price']

admin.site.register(Book,Bookconfig1)

  定制功能

from django.contrib import admin
from app01.models import *

admin.site.register(Author)
admin.site.register(Publish)

@admin.register(Book)
class Bookconfig(admin.ModelAdmin):
    # 定制显示的列
    list_display = ['title','price']
    # 定制列可以点击跳转
    list_display_links = ['title']
    # 定制右侧快速筛选
    list_filter=['title']
    # 列表查询是否自动select_related
    list_select_related = ['publisher']
    # 列表显示时可以编辑的列
    list_editable = ['price']
    # 模糊搜索
    search_fields = ['title']
    # 对Date和DateTime类型进行搜索
    date_hierarchy = 'publishDate'

    # 定制action中的操作
    def patch_init(self,request,queryset):
        queryset.update(price=100)

    patch_init.short_description='批量初始化'
    actions=[patch_init]

    #详细页面,针对FK和M2M变成input框形式
    raw_id_fields = ('publisher',)

    #详细页面,定制显示的字段
    fields = ('title',)

    #详细页面,定制排除的字段
    exclude = ('price',)

    #详细页面时,定制只读的字段
    readonly_fields = ('title',)

    #详细页面时,使用fieldsets标签对数据进行分割显示
    fieldsets = (('基本数据',{'fields':('title',)}),('其他',{'classes':('collapse',),'fields':('price',)}),)

    # 详细页面时,M2M显示时,数据移动选择
    filter_vertical = ('authors',)

    #列表时,数据排序规则
    ordering = ('-id',)

    # 详细页面时,使用radio显示选项(FK默认使用select)
    radio_fields = {'publisher':admin.VERTICAL}


# 详细页面,如果有其他表和当前表做FK,那么详细页面可以进行动态增加和删除
class BookInline(admin.StackedInline):  # TabularInline
    extra = 0
    model = Book
class GroupAdminMode(admin.ModelAdmin):
    list_display = ('id', 'title',)
    inlines = [BookInline, ]# empty_value_display = "列数据为空时,显示默认值"
@admin.register(Book)
class UserAdmin(admin.ModelAdmin):
    empty_value_display = "列数据为空时,默认显示"

    list_display = ('user', 'pwd', 'up')

    def up(self, obj):
        return obj.user

    up.empty_value_display = "指定列数据为空时,默认显示"


# form = ModelForm,用于定制用户请求时候表单验证
from django.forms import ModelForm
from django.forms import fields
class MyForm(ModelForm):
    others = fields.CharField()

    class Meta:
        model = models = Book
        fields = "__all__"

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    form = MyForm

   定制HTML模板

#定制HTML模板
add_form_template = None
change_form_template = None
change_list_template = None
delete_confirmation_template = None
delete_selected_confirmation_template = None
object_history_template = None   

   projectDemo

https://github.com/Leila2Utopia/adminCustomize

 

 

转载于:https://www.cnblogs.com/iamluoli/p/9143742.html

相关文章:

  • Spring读书笔记-----部署我的第一个Spring项目
  • 减少死锁的几个常用方法
  • ylbtech-cnblogs(博客园)-数据库设计-7,News(新闻)
  • 用whistle和proxifier抓包调试任意客户端的网络请求
  • 一个C#文件传输模块,支持断点续传
  • linux 软硬链接
  • 单用户登陆限制(单点登录??)
  • 操作系统---进程 vs 线程
  • WPF使用第三方的字体(TTF文件)
  • RabbitMQ基础教程之基于配置的消费者实现
  • 上传文件过大的问题FileUploadBase$SizeLimitExceededException
  • 数据库index
  • What Is Cocoa?
  • JAVA 学习IO流
  • lightoj 1013 dp
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Git同步原始仓库到Fork仓库中
  • Linux CTF 逆向入门
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Redis中的lru算法实现
  • Spring Boot快速入门(一):Hello Spring Boot
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前端面试之闭包
  • 删除表内多余的重复数据
  • 鱼骨图 - 如何绘制?
  • 做一名精致的JavaScripter 01:JavaScript简介
  • Spring Batch JSON 支持
  • 阿里云ACE认证学习知识点梳理
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​【已解决】npm install​卡主不动的情况
  • ​520就是要宠粉,你的心头书我买单
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #DBA杂记1
  • #Ubuntu(修改root信息)
  • $ git push -u origin master 推送到远程库出错
  • (1)(1.13) SiK无线电高级配置(六)
  • (day 12)JavaScript学习笔记(数组3)
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (七)Java对象在Hibernate持久化层的状态
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (四)图像的%2线性拉伸
  • (一)Neo4j下载安装以及初次使用
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转) Android中ViewStub组件使用
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .md即markdown文件的基本常用编写语法
  • .Net IOC框架入门之一 Unity
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net开发时的诡异问题,button的onclick事件无效