django中的admin组件之自定义组件的search,actions,list_display_links

上节回顾:
               
                1 反向解析(reverse)
                2 modelForm---》添加和编辑
                    
                    添加:
                        class BookModelForm():
                            class Meta:
                                    model=Book
                                    fields="__all__"
                        
                        def add(reqeust):
                                if GET:
                                    form=BookModelForm()                                
                                    return render(request,"add.html",{"form":form})
                                else:
                                    form=BookModelForm(request.POST)
                                    if form.is_valid():
                                         form.save() # create
                                    else:
                                        return render(request,"add.html",{"form":form})
                                        
                                ‘‘‘
                                add.html:
                                        <form action="" method="post" novalidate>
                                              {% csrf_token %}
                                              {% for field in form %}
                                              <div class="form-group">
                                                  <label for="">{{ field.label  }}</label>
                                                  {{ field }}
                                                  <span class="error pull-right" style="color: red">{{ field.errors.0 }}</span>
                                              </div>
                                              {% endfor %}

<input type="submit">
                                        </form>
                                    
                                ‘‘‘
                                        
                                                          
                        def edit(reqeust,id):
                                edit_obj=Book.objects.get(pk=id)
                                if GET:
                                    form=BookModelForm(instance=edit_obj)                                
                                    return render(request,"edit.html",{"form":form})
                                else:
                                    form=BookModelForm(request.POST,instance=edit_obj)
                                    if form.is_valid():
                                         form.save() # update
                                    else:
                                        return render(request,"edit.html",{"form":form})            
                    
                
                
                3 删除
                
            
                
                4  分页:保存搜索条件

今日内容:

写到这里我们发现我们list试图函数中的代码有很多,所以我们想着把把里面的一写功能写成一个类,减少lisetview视图函数的负担。

我们在上面创建一个类class ShowList,这个类专门写我们所有展示相关的功能,那这个类怎么写呢?

很简单:将视图函数中的功能,在这类中写成函数。但是这时候会有很多飘黄的地方,这时候我们就会想到有类肯定会有self,但是新创建的这个类中self和我们复制过来的self是不一样的。所以在试图函数中引用这个类的时候,要将试图函数中self传进去。showlist = ShowList(self,data_list,request)

在这个类中我们用config_obj来接受传过来的self,所以,我们原来视图函数中的self现在指 的是self.config_obj,将他们替换过来就好了。

现在我们将分页器加在这个list试图里面。

新建一个py文件,我们现在把之前写的分页放在我们的stark组建里。

这个分页部分当然也要写在我们要封装的ShowList的类中,根据分页,传进去相应的参数就行。(可以把分页的原理看一下,)

现在我们来实现一下list_display_links部分,

我们要现在默认配置类中添加list_display_links = [] ,这样一个变量。

然后我们想,这一部分要添加进哪呢?当我们点击具体的某个字段的时候,就能够跳转到编辑的页面中去,并且实现编辑那一列消失。应该是要添加进表单部分,在表单部分进行判断,所以:

那操作那一列是怎么消失的呢?

这样就行了。

接下来就是写search功能了

先在页面中添加这么一个html。

先来想一下需求,当我们点击搜索按钮时,要拿到搜索的内容之后和数据库中进行匹配,然后展示匹配的内容,这是个get请求。

现在默认配置类中添加一个变量search_fields = [],我们现在是这么想的,data_list是所有的数据,现在我们要根据search条件过滤,然后交给showlist展示。

我们介绍一个新的知识点,

所以我们这样写:

接下来就是actions部分了

在我们checkbox的input标签中,

现在页面中添加html:

          <label>Action:</label>
                <select name="action" class="form-control" style="display: inline-block;width: 300px" >
                    <option value="" selected="">---------</option>
                    {% for action in showlist.get_new_actions %}
                        <option value="{{ action.name }}">{{ action.text }}</option>
                    {% endfor %}
                </select>

我们先来想一想,当我们点击checkbox的时候然后进行action,所以说这个action部分和下面的表单应该是要在一个form里面的,是一个post请求。

同样要先在默认配置类中添加一个变量,actions= [],我们想当我们点击checkbox的时候,要获取到那一条数据,拿到的是checkbox标签中的name和value值,然后对那一条数据的某一个字段进行初始化。

我们要构建一个新的action列表,这个列表中既要有自定义配置类的action又要有默认配置类的action。那这个列表应该怎么构建?[{‘name‘: ‘patch_init‘, ‘text‘: ‘价格初始化‘}, {‘name‘: ‘patch_delete‘, ‘text‘: ‘删除数据‘}]

试图函数中这样写:

这样就可以了 。

然后我们再来看一下这个的listview中的代码量。

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

时间: 2024-11-01 22:46:03

django中的admin组件之自定义组件的search,actions,list_display_links的相关文章

django中的admin组件之自定义组件

内容回顾: 一 admin的使用 app01的admin.py文件:                  class BookConfig(admin.ModelAdmin):               list_display=[]               list_display_links=[]               list_filter=[]               search_fields=[]                              def pat

django中的admin组件之自定义组件的数据展示以及自定义列

虽然我们基本实现了我们自定义组件stark的功能,接下来就是显示数据了. 今天我们先来写查.先来写表单部分 我们如果需要显示我们自己配置类中的字段,应该怎么做呢? 我们有这样一个想法,将这些数据放在一个列表中,类似这样[['python',122],['linux',110]],然后在页面上依次循环这个列表,取值就行了. self.model.objects.all()中里面有我们需要的对象,self.list_display中有我们需要的字段.所以: def listview(self,req

【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件

博客地址 : http://blog.csdn.net/shulianghan/article/details/41520569 代码下载 : -- GitHub : https://github.com/han1202012/WheelViewDemo.git -- CSDN : http://download.csdn.net/detail/han1202012/8208997 ; 博客总结 : 博文内容 : 本文完整地分析了 WheelView 所有的源码, 包括其适配器类型, 两种回调接

Django中的Admin站点

使用Admin站点 假设我们要设计一个新闻网站,我们需要编写展示给用户的页面,网页上展示的新闻信息是从哪里来的呢?是从数据库中查找到新闻的信息,然后把它展示在页面上.但是我们的网站上的新闻每天都要更新,这就意味着对数据库的增.删.改.查操作,那么我们需要每天写sql语句操作数据库吗? 如果这样的话,是不是非常繁琐,所以我们可以设计一个页面,通过对这个页面的操作来实现对新闻数据库的增删改查操作.那么问题来了,老板说我们需要在建立一个新网站,是不是还要设计一个页面来实现对新网站数据库的增删改查操作,

?微信小程序?--基本组件,事件,自定义组件

水了几篇博客真开心.其实不是真的水,也配图啥的吧 .... 好了, 我要开始认真了哈 跟着我 好好学,明年哥给你取个嫂子! 基本组件 <view>这就类似于我们的 div 很简单吧!</view> <text>简单的文本</text> <image>参数有 src mode(图片的裁剪)</image> 简单的水一下就行了 还有两个viedo(视频) 和 swiper(微信内置的轮播图组件) 都在这个链接里了 点击==点我== 事件(

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

昨天我们将自定义列放在类我们自定义的Bookconfig配置类内,但是这样就写死了,因为当我们访问publish表的时候应该也有这样的自定义列,所以我们应该将我们的自定义列放在默认的配置表里面.应该怎么做? 当我们的自定义列挪到默认配置类的时候,我们自定义配置类中的list_display就要发生改动, list_display = ["title", "price", "publish",'authors','publishDate',site

Django中的tags,母版和继承,组件,静态文件相关,自定义simpletag和自定义inclusion_tag

Tags for <ul> {% for user in user_list %} <li>{{ user.name }}</li> {% endfor %} </ul> for循环可用的一些参数: Variable Description forloop.counter 当前循环的索引值(从1开始) forloop.counter0 当前循环的索引值(从0开始) forloop.revcounter 当前循环的倒序索引值(从1开始) forloop.rev

django中的Admin是如何工作的?

1.寻找app的 admin.py 当服务启动时,Django从`` url.py`` 引导URLconf,然后执行`` admin.autodiscover() 语句. 这个函数遍历INSTALLED_APPS配置,并且寻找相关的 admin.py文件. 如果在指定的app目录下找到admin.py,它就执行其中的代码. url.py----(admin.autodiscover)---->INSTALLED_APP----(寻找安装的app)---->admin.py 2.注册模块显示界面

Django 中使用 logging 配置 logger 自定义日志输出

在使用 django 开发过程中,默认的日志输出是不能满足我们去排查问题的,往往需要自定义的日志输出,帮助我们去排查程序BUG,定位问题原因. 在使用 django 的开发过程中,我使用的是 python 内置日志模块 logginglogging 的详细使用讲解我就不多说了,度娘一抓一大抓:我只记录下我在 django settings 中的 logger 配置.方便以后使用 以下在我在 settings 中定义的 logger:# Custom output log LOGGING = {'