django中的admin组件之自定义组件的增删改查的完善

昨天我们将自定义列放在类我们自定义的Bookconfig配置类内,但是这样就写死了,因为当我们访问publish表的时候应该也有这样的自定义列,所以我们应该将我们的自定义列放在默认的配置表里面。应该怎么做?

当我们的自定义列挪到默认配置类的时候,我们自定义配置类中的list_display就要发生改动,

list_display = ["title", "price", "publish",‘authors‘,‘publishDate‘,sites.ModelAdmin.edit,sites.ModelAdmin.delete]

而在默认配置类中,往list_display添加edit,delete。list_display = [‘__str__‘,edit,delete]。这样写会很麻烦。

我们有这样一个办法,在默认配置类中,我们新构建一个列表,然后把我们自定义配置类的list_display添加到这个新列表中,并且把edit,和delete也添加进去,这样在循环新的list-display的时候,既能实现到自己配置类中的list_display,也能实现默认配置类中的list_display,

 # 默认操作函数
  def edit(self,obj=None,is_header=False):
        if is_header:   #  如果传过来的参数is_header=true则说明是表头部分
            return ‘操作‘
        else:       # 如果传过来的参数为obj,则说明是表单部分
            return mark_safe("<a href=‘/stark/app01/book/%s/change/‘>编辑</a>"%obj.pk)
    def delete(self,obj=None,is_header=False):
        if is_header:
            return ‘操作‘
        else:
            return mark_safe("<a href=‘/stark/app01/book/%s/delete/‘>删除</a>" % obj.pk)
    def check_box(self, obj=None, is_header=False):
        if is_header:
            return ‘操作‘
        else:
            return mark_safe("<input type=‘checkbox‘pk=%s>" % obj.pk)
#视图函数def new_list_display(self):    temp=[]    temp.extend(self.list_display)  # 把自己配置类中的list_display添加进去,                                    # 对于没有自定义配置类的model,就是用默认配置类的list_display 注意用的是extend    temp.insert(0,ModelAdmin.check_box)  # 在最前面加ModelAdmin.check_box,不要写成self.check_box   这是个坑,一定不要写成self.check_box                         #  如果写成了self.edit,说明已经在edit这个方法中传了参数self,在调用的时候,就不需要传self这个参数了    temp.append(ModelAdmin.edit)    temp.append(ModelAdmin.delete)    return temp

这时候我们发现,自定义列中的标签写死了,我们希望访问每个model都有这个自定义操作列。

这时候我们想到url的反向解析。

拿一个操作来说,在url中起好name,利用revers反向解析url。替换a标签的href。

写成函数之后,就变成这样:

接下来就是利用ModelForm对数据进行操作了。(复习ModelForm知识.)

我们发现,不仅在添加视图函数中用到modelform,在编辑,甚至删除的试图中也用到modelform。所以可以写成函数。

在app01下的stark.py文件下可以写自己的model form

在页面中渲染:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加数据</title>
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css">
    <link rel="stylesheet" href="/static/css/form.css">
</head>
<body>
<div class="container">
    <h3>添加数据</h3>
    <div class="row">
        <div class="col-md-6 col-md-offset-3">
           <form action="" method="post" novalidate class="form-horizontal">
                {% csrf_token %}
                {% for field in form %}
                    <div class="form-group">
                        <label for="" class="col-sm-2 control-label">{{ field.label }}</label>
                        {{ field }}
                        <div><span class="errors pull-right" style="color:red">{{ field.errors.0 }}</span></div>
                    </div>
                {% endfor %}
                <button class="btn btn-default">提交</button>
            </form>
        </div>
    </div>
</div>
</body>
</html>

接下来就是给list页面添加页码了。

我们直接将之前写的分页拿过来用,

原文地址:https://www.cnblogs.com/yb635238477/p/9562969.html

时间: 2024-10-07 15:58:39

django中的admin组件之自定义组件的增删改查的完善的相关文章

JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(三):两个Viewmodel搞定增删改查

前言:之前博主分享过knockoutJS和BootstrapTable的一些基础用法,都是写基础应用,根本谈不上封装,仅仅是避免了html控件的取值和赋值,远远没有将MVVM的精妙展现出来.最近项目打算正式将ko用起来,于是乎对ko和bootstraptable做了一些封装,在此分享出来供园友们参考.封装思路参考博客园大神萧秦,如果园友们有更好的方法,欢迎讨论. KnockoutJS系列文章: JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一) JS组件

JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(二)

前言:上篇 JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一) 介绍了下knockout.js的一些基础用法,由于篇幅的关系,所以只能分成两篇,望见谅!昨天就觉得应该快点完成下篇,要不然有点标题党的感觉,思及此,博主心有不安,于是加班赶出了下篇.如果你也打算用ko去做项目,且看看吧! 一.效果预览 其实也没啥效果,就是简单的增删改查,重点还是在代码上面,使用ko能够大量节省界面DOM数据绑定的操作.下面是整个整个增删改查逻辑的js代码: 页面效果: 二.

django之创建第8-1个项目-数据库之增删改查/数据库数据显示在html页面

1.为test.DB数据库预先创建下面数据 1    张三    16    2015-01-02    12    李四    17    2015-01-04    13    王五    14    2015-04-24    0 2.配置C:\djangoweb\helloworld\blog\urls.py文件 # -*- coding: UTF-8 -*- from django.conf.urls import patterns, include, url urlpatterns

AngularJS中使用$http对MongoLab数据表进行增删改查

本篇体验使用AngularJS中的$http对MongoLab数据表进行增删改查. 主页面: <button ng-click="loadCourse()">Load Course</button> <button ng-click="toggleAddCourse(true)">Add New Course</button> <ng-includce src="'course_list.html'&q

48.Python中ORM模型实现mysql数据库基本的增删改查操作

首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'orm_intro_dem', 'USER': 'root', 'PASSWORD': 'root', 'HOST': '127.0.0.1', 'PORT': '3306', } } 之后将创建的app添加到settings.py文件中的INSTALLED_APPS中

Web框架之Django_02基本操作(Django项目启动配置、数据库连接、orm、增删改查)

摘要: Django项目简单现实过程 pycharm连接数据库 Django之orm简单操作增删改查 一.新建Django项目.配置.设置: 新建Django项目:(为了熟悉Django操作,暂时全部用cmd形式来实现,很多地方需要手动添加)项目目录D:\Django: >>管理员权限打开cmd,通过cmd命令进入项目目录 >>django-admin startproject my_Dproject (创建项目) >>cd my_Dproject (进入项目文件夹)

Python中的列表、元组、切片、增删改查、#count:计算某元素出现次数、找位置#index、#reverse()反转、#sort()

元组和列表的区别: 声明一个元组并赋值的语法与列表相同,不同之处是元组使用小括号,列表使用方括号,元素之间也是用英文逗号分隔.需要注意的是,当元组只有一个元素时,需要在元素的后面加一个英文逗号分隔符,以防止与表达式中的小括号混淆.这是因为小括号既可以表示元组,又可以表示表达式中的优先级算符,这就容易产生歧义. 1.列表 list[ ] a=['chao','jin'] 2.切片     #增删改查 查 切片 [] print(a[1:]) #取到最后 print(a[1:-1]) #取到倒数第二

Django 【第五篇】ORM单表增删改查

一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name ="海东",course="python",birth="2000-9-9",fenshu=80) Frank_obj.save() # 方式二: models.Student.objects.create(name ="海燕",course="python

BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面

前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一个什么工具直接生成页面效果,啥代码都不用写了,那该多爽.于是研究了下T4的语法,虽然没有完全掌握,但是算是有了一个大致的了解.于是乎有了今天的这篇文章:通过T4模板快速生成页面. KnockoutJS系列文章: JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一) JS组件系列——BootstrapTable+KnockoutJS