zoukankan      html  css  js  c++  java
  • 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页面添加页码了。

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

  • 相关阅读:
    struts2 局部类型转换器
    Struts2 命名空间配置
    Struts2 国际化
    Struts2 跟踪用户状态
    Struts2
    Struts2支持的处理结果类型
    SGI STL内存配置器(一):内存泄漏?
    TP 3.2 笔记 (1)
    AOP TP框架有感
    eclipse+git
  • 原文地址:https://www.cnblogs.com/yb635238477/p/9562969.html
Copyright © 2011-2022 走看看