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("编辑"%obj.pk)
    def delete(self,obj=None,is_header=False):
        if is_header:
            return '操作'
        else:
            return mark_safe("删除" % obj.pk)
    def check_box(self, obj=None, is_header=False):
        if is_header:
            return '操作'
        else:
            return mark_safe("" % 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。

django中的admin组件之自定义组件的增删改查的完善_第1张图片

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

django中的admin组件之自定义组件的增删改查的完善_第2张图片

 

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

django中的admin组件之自定义组件的增删改查的完善_第3张图片

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

django中的admin组件之自定义组件的增删改查的完善_第4张图片

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

django中的admin组件之自定义组件的增删改查的完善_第5张图片

在页面中渲染:


"en">

    "UTF-8">
    添加数据
    "stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css">
    "stylesheet" href="/static/css/form.css">


class="container">

添加数据

class="row">
class="col-md-6 col-md-offset-3">
"" method="post" novalidate class="form-horizontal"> {% csrf_token %} {% for field in form %}
class="form-group"> {{ field }}
class="errors pull-right" style="color:red">{{ field.errors.0 }}
{% endfor %}

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

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

 

转载于:https://www.cnblogs.com/yb635238477/p/9562969.html

你可能感兴趣的:(django中的admin组件之自定义组件的增删改查的完善)