CMDB资产管理系统开发【day26】:admin action
本节目标
审核写到数据库,我就单独写一个如下的 页面
单机go后就跳转到如下图界面,我们这节课的目标就是写一个这样的页面
asset\admin.py部分代码 注释如下:
class NewAssetApprovalZoneAdmin(admin.ModelAdmin): list_display = ('sn','asset_type','manufactory','model','cpu_model','cpu_count','cpu_core_count','ram_size','os_distribution','os_release','date','approved','approved_by','approved_date') actions = ['approve_selected_objects'] def approve_selected_objects(modeladmin, request, queryset): selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME) print("----select",selectd) ''' ACTION_CHECKBOX_NAME 是获取选中的id 两个的id都打印出来?为什么是2,checkbox在后台获取的就不是一个了,是一个列表 获取的是一个列表 getlist 4,2 是什么? 就是那个自增ID ''' ct = ContentType.objects.get_for_model(queryset.model) return HttpResponseRedirect("/asset/new_assets/approval/?ct=%s&ids=%s" % (ct.pk, ",".join(selected))) approve_selected_objects.short_description = "批准入库" '''在菜单下拉框中显示"批准入库"'''
ACTION_CHECKBOX_NAME是什么?
两个的id都打印出来?为什么是2,checkbox在后台获取的就不是一个了,是一个列表
checkbox在后台获取方式
getlist 4,2 是什么?
获取的就是那个自增ID
为什么要获取这两个东西?
你要跳到一个新的页面,跳转了一个url,你没有办法把对象传过去,所以你要获取这两个东西
数据回报到哪里呢?
1、asset\admin.py文件下的
return HttpResponseRedirect("/asset/new_assets/approval/?ct=%s&ids=%s" % (ct.pk, ",".join(selected)))
2、asset\url.py下的
url(r'^new_assets/approval/$', views.new_assets_approval, name="new_assets_approval"),
3、asset\views.py文件下的
def new_assets_approval(request): '''是以get还是以post跳转过去的?是以get方式跳转过去的,所以以下代码我们就不用看post代码了,直接看get方法"''' if request.method == 'POST': request.POST = request.POST.copy() approved_asset_list = request.POST.getlist('approved_asset_list') approved_asset_list = models.NewAssetApprovalZone.objects.filter(id__in=approved_asset_list) response_dic = {} for obj in approved_asset_list: request.POST['asset_data'] = obj.data ass_handler = core.Asset(request) if ass_handler.data_is_valid_without_id(): ass_handler.data_inject() obj.approved = True obj.save() response_dic[obj.id] = ass_handler.response return render(request, 'assets/new_assets_approval.html', {'new_assets': approved_asset_list, 'response_dic': response_dic}) else: ids = request.GET.get('ids') '''获取到ids,ids是那?是我们刚选中的那几条数据''' id_list = ids.split(',') new_assets = models.NewAssetApprovalZone.objects.filter(id__in=id_list) return render(request, 'assets/new_assets_approval.html', {'new_assets': new_assets}) ''' 从待批准区里把这几条数据过滤出来返回到这个new_assets_approval.html地址, 另外一个页面就是列出要批准的资产,问你要不要批准
前端页面代码
{% extends 'base.html' %} {% block page-container %} <div class="eq-height"> <div class="col-sm-4 eq-box-sm"> <!--Panel with Header--> <!--===================================================--> <div class="panel"> <div class="panel-heading"> <h3 class="panel-title" style="color: red; ">确认要将下列资产存入数据库么?</h3> </div> <div class="panel-body"> <form method="post" action="{% url 'new_assets_approval' %}">{% csrf_token %} <table class="table table-hover"> <tr> <th>#</th> <th>SN</th> <th>资产类型</th> <th>厂商</th> <th>型号</th> <th>CPU型号</th> <th>CPU颗数</th> <th>CPU核数</th> <th>内存大小</th> <th>汇报日期</th> </tr> {% for new_asset in new_assets %} <tr data-set="{{ new_asset.id }}"> <td>{{ forloop.counter }}</td> <td>{{ new_asset.sn }}</td> <td>{{ new_asset.asset_type }}</td> <td>{{ new_asset.manufactory }}</td> <td>{{ new_asset.model }}</td> <td>{{ new_asset.cpu_model}}</td> <td>{{ new_asset.cpu_count}}</td> <td>{{ new_asset.cpu_core_count}}</td> <td>{{ new_asset.ram_size}}</td> <td>{{ new_asset.date }}</td> {% if new_asset.id in response_dic %} <td><a href="#asset_{{ new_asset.id }}">执行结果</a></td> {% endif %} </tr> {% endfor %} </table> <select name="approved_asset_list" class="hide" multiple> {% for new_asset in new_assets %} <option value="{{ new_asset.id }}" selected>{{ new_asset.sn }}</option> {% endfor %} </select> <input type="submit" value="Yes, I'm sure" class="btn btn-danger"> </form> <div > {% for key,msg in response_dic.items %} <div> {% for asset in new_assets %} {% if asset.id == key %} <h4 id="asset_{{ asset.id }}"><a style="color:deepskyblue" href="/admin/assets/asset/?q={{ asset.sn }}" target="_blank">{{ asset.sn }} </a> | {{ asset.manufactory }} {{ asset.model }} | {{ asset.cpu_model }} </h4> {% endif %} {% endfor %} <p style="color: green"> {% for item in msg.info %} {{ item |safe}} <br/> {% endfor %} </p> <p style="color: red"> {% for item in msg.error %} {% if 'Warning' in item.keys.0 %} <span style="color:orange;">{{ item }}</span> {% else %} {{ item }} {% endif %} <br/> {% endfor %} </p> </div> <hr/> {% endfor %} </div> </div> </div> <!--===================================================--> <!--End Panel with Header--> <button id="scroll-top" class="btn"><i class="fa fa-chevron-up"></i></button> </div> </div> {% endblock %}
测试效果截图
一、选中要批准的资产,下拉框选择批准入库,单机go提交
二、确认要将下列资产存入数据库吗?YES
三、 绿色代表资产已创建了,红色的是磁盘数据缺失
四、 看看资产表已经写入成功
作者:罗阿红
出处:http://www.cnblogs.com/luoahong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。