伙伴云客服论坛»论坛 S区 S客户管理 查看内容

0 评论

0 收藏

分享

Django web开发 (十) 订单管理

文章目录


      订单管理
        实现对话框弹框中内容特殊数据输入
          订单编号负责人为当前登录
        对话框u化删除
          显示出来删除内容
        从数据库中获取数据的类型编辑
          显示出来修改内容
        完好代码



订单管理

实现对话框

新建表:
models.py
  1. classOrder(models.Model):""" 订单 """
  2.     oid = models.CharField(verbose_name="订单号", max_length=64)
  3.     title = models.CharField(verbose_name="名称", max_length=32)
  4.     price = models.IntegerField(verbose_name="价格")
  5.     status_choices =((1,"待支付"),(2,"已支付"),)
  6.     status = models.SmallIntegerField(verbose_name="状态", choices=status_choices, default=1)
  7.     admin = models.ForeignKey(verbose_name="管理员", to="Admin", on_delete=models.CASCADE)
复制代码
urls.py

Django web开发 (十) 订单管理-1.png

orderlist.html

Django web开发 (十) 订单管理-2.png

分别用jquery和js里的方法实现对话框
第一种方式: 官网自带方式
Django web开发 (十) 订单管理-3.png

第二种方式: javascript实现
  1. {% block script %}<script type="text/javascript">
  2.     $(function(){
  3.         bindBtnAddEvent();})
  4.     function bindBtnAddEvent(){
  5.         $("#btnAdd").click(function(){
  6.             $("#myModal").modal('show');});}</script>{% endblock %}
复制代码
Django web开发 (十) 订单管理-4.png

弹窗的完好html代码
  1. {% extends 'layout.html' %}
  2. {% block content %}
  3. <divclass="container"><div><inputtype="button"value="新建订单1"class="btn btn-primary"data-toggle="modal"data-target="#myModal"><inputid="btnAdd"type="button"value="新建订单2"class="btn btn-primary"></div></div><!-- 新建订单1 - 对话框 --><divclass="modal fade"id="myModal"tabindex="-1"role="dialog"aria-labelledby="myModalLabel"><divclass="modal-dialog"role="document"><divclass="modal-content"><divclass="modal-header"><buttontype="button"class="close"data-dismiss="modal"aria-label="Close"><spanaria-hidden="true">×</span></button><h4class="modal-title"id="myModalLabel">Modal title</h4></div><divclass="modal-body">
  4.           ...
  5.         </div><divclass="modal-footer"><buttontype="button"class="btn btn-default"data-dismiss="modal">Close</button><buttontype="button"class="btn btn-primary">Save changes</button></div></div></div></div>
  6. {% endblock %}
  7. {% block script %}
  8.   <scripttype="text/javascript">$(function(){bindBtnAddEvent();})functionbindBtnAddEvent(){$("#btnAdd").click(function(){$("#myModal").modal('show');});}</script>
  9. {% endblock %}
复制代码
弹框中内容

order.py
Django web开发 (十) 订单管理-5.png

order.html
Django web开发 (十) 订单管理-6.png

Django web开发 (十) 订单管理-7.png

js

Django web开发 (十) 订单管理-8.png

order.py
order_add

Django web开发 (十) 订单管理-9.png


特殊数据输入

订单编号

Django web开发 (十) 订单管理-10.png


负责人为当前登录

Django web开发 (十) 订单管理-11.png


对话框u化

Django web开发 (十) 订单管理-12.png

Django web开发 (十) 订单管理-13.png


删除

实现点击删除按钮后,弹出确认删除的弹出框,确认后再停止删除
显示出来

orderlist.html
不停止链接跳转,采用js跳转
用 js 和 ajax的方式实现数据行的删除,注意下面的id与class绑定匹配, 例如:
$(“.btn-delete”)对应HTML中的class=“btn-delete"位置
$(”#btnConfirmDelete")对应HTML中的id="btnConfirmDelete"位置
Django web开发 (十) 订单管理-14.png

Django web开发 (十) 订单管理-15.png


Django web开发 (十) 订单管理-16.png

Django web开发 (十) 订单管理-17.png


删除内容

获取要删除的id
Django web开发 (十) 订单管理-18.png

Django web开发 (十) 订单管理-19.png


Django web开发 (十) 订单管理-20.png

Django web开发 (十) 订单管理-21.png


红色的部分:
Django web开发 (十) 订单管理-22.png

order.py

Django web开发 (十) 订单管理-23.png


Django web开发 (十) 订单管理-24.png


从数据库中获取数据的类型

    .all()获取到的为对象组成的querryset.filter(id=uid).first()获取的是对象.filter(id=uid).values(“id”,“title”)获取的是字典dict.filter(id=uid).values_list(“id”,“title”)获取的是元组list
  1. 获取的是{obj1,obj2,obj3}{{'id':1,'title':'xx1'},{'id':2,'title':'xx2'},{'id':2,'titile':'xx3'}}
  2. queryset = models.Order.objects.all()
  3. 获取的是obj1对象                {'id':1,'title':'xx1'}
  4. row_object = models.Order.objects.filter(id=uid).first()
  5. 可以拿到数据
  6. row_object.id1
  7. row_object.title   xx1
  8. 获取的是字典dict{'id':1,'title':'xx1'}
  9. row_dict = models.Order.objects.filter(id=uid).values("id","title")
  10. 获取的是元组list[('id':1),('title':'xx1')]
  11. row_dict = models.Order.objects.filter(id=uid).values_list("id","title")
复制代码
编辑

显示出来

Django web开发 (十) 订单管理-25.png


直接使用添加数据的对话框
问题:编辑需要对话框中有原来的默认数据
处置:

Django web开发 (十) 订单管理-26.png

Django web开发 (十) 订单管理-27.png

Django web开发 (十) 订单管理-28.png


效果:

Django web开发 (十) 订单管理-29.png


修改内容

思路:复用之前任务添加的代码
可行性:
编辑用户时,有名称,价格,状态+编辑用户的id
而增加用户只要名称,价格,状态三个手动输入的数据,
在后端.py中判断id是否为undefine来停止操作
假设是,添加订单号和管理员添加到数据库
不是,则将form表单传过来的数据修改到到该id所在行中

Django web开发 (十) 订单管理-30.png


Django web开发 (十) 订单管理-31.png


完好代码

.py
  1. # author : Sun;  time : 2023/2/11 18:11;import json
  2. from django.shortcuts import render, HttpResponse
  3. from django.http import JsonResponse
  4. from bm01 import models
  5. from bm01.utils.pagination import Pagination
  6. from bm01.utils.form import BootStrapModelForm
  7. from django.views.decorators.csrf import csrf_exempt
  8. from datetime import datetime
  9. import random
  10. classOrderModelForm(BootStrapModelForm):classMeta:
  11.         model = models.Order
  12.         # fields = "__all__"
  13.         exclude =["oid","admin"]deforder_list(request):
  14.     form = OrderModelForm()# 搜索框
  15.     data_dict ={}
  16.     search_data = request.GET.get('se',"")if search_data:
  17.         data_dict ={"title__contains": search_data}
  18.     queryset = models.Order.objects.filter(**data_dict).order_by("-id")# 分页 页码跳转框
  19.     page_obj = Pagination(request, queryset)
  20.     context ={"search_data": search_data,"form": form,"ulist": page_obj.page_queryset,"page_string": page_obj.html()}return render(request,'order_list.html', context)deforder_del(request):
  21.     uid = request.GET.get('uid')if models.Order.objects.filter(id=uid).exists():
  22.         models.Order.objects.filter(id=uid).delete()return JsonResponse({"status":True})return JsonResponse({"status":False,"error":"删除失败, 数据不存在,请刷新页面后重试!"})deforder_detail(request):
  23.     uid = request.GET.get('uid')
  24.     row_dict = models.Order.objects.filter(id=uid).values("title","price","status").first()ifnot row_dict:return JsonResponse({"status":False,"error":"数据不存在,请刷新页面后重试!"})
  25.     result ={"status":True,"data": row_dict,}return JsonResponse(result)@csrf_exemptdeforder_add(request):'''新建/order编辑订单'''
  26.     order = request.POST['order']if order !='undefined':
  27.         o_obj = models.Order.objects.filter(id=order).first()
  28.         form = OrderModelForm(data=request.POST, instance=o_obj)if form.is_valid():
  29.             form.save()return JsonResponse({"status":True})return HttpResponse(json.dumps({"status":False,"error": form.errors}))else:
  30.         form = OrderModelForm(data=request.POST)if form.is_valid():# 额外增加一些不是用户输入的值,自己输入的
  31.             form.instance.oid = datetime.now().strftime("%Y%m%d%H%M%S")+str(random.randint(1000,9999))
  32.             form.instance.admin_id = request.session["info"]['id']
  33.             form.save()return JsonResponse({"status":True})return HttpResponse(json.dumps({"status":False,"error": form.errors}))
复制代码
.html
  1. {% extends 'xlayout.html' %}
  2. {% block mbname %}
  3.     <div><divclass="container"><divclass="row cle"style="margin-bottom: 20px"><divclass="col-xs-8"><ahref="#"type="button"class="btn btn-success"id="btnAdd">新建订单</a></div><divclass="col-xs-4"><formmethod="get"><divclass="input-group"><inputclass="form-control"name="se"type="text"placeholder="Search for..."value="{{ search_data }}"><spanclass="input-group-btn"><buttonclass="btn btn-default"type="submit">search number</button></span></div></form></div></div><divclass="bs-example"data-example-id="panel-without-body-with-table"><divclass="panel panel-default"><!-- Default panel contents --><divclass="panel-heading"><spanclass="glyphicon glyphicon-list"aria-hidden="true"></span> 部门列表
  4.                     </div><!-- Table --><tableclass="table table-bordered"><thead><tr><th>ID</th><th>订单号</th><th>名称</th><th>价格</th><th>状态</th><th>管理员</th><th>操作</th></tr></thead><tbody>
  5.                         {% for i in ulist %}
  6.                             <truid= {{i.id}}><td>{{ i.id }}</td><td>{{ i.oid }}</td><td>{{ i.title }}</td><td>{{ i.price }}</td><td>{{ i.get_status_display }}</td><td>{{ i.admin.username }}</td><td><buttonuid="{{ i.id }}"class="btn btn-primary btn-xs btn-edit">编辑</button><buttonuid="{{ i.id }}"class="btn btn-danger btn-xs btn-delete">删除</button></td></tr>
  7.                         {% endfor %}
  8.                         </tbody></table></div></div><ulclass="pagination">
  9.                 {{ page_string }}
  10.             </ul><!-- 新建/编辑 订单的对话框 --><divclass="modal fade"id="myModal"tabindex="-1"role="dialog"aria-labelledby="myModalLabel"><divclass="modal-dialog"role="document"><divclass="modal-content"><divclass="modal-header"><buttontype="button"class="close"data-dismiss="modal"aria-label="Close"><spanaria-hidden="true">×</span></button><h4class="modal-title"id="myModalLabel">新见订单</h4></div><divclass="modal-body"><divclass="panel-body"><formmethod="post"id="formAdd"novalidate><div>
  11.                                         {% for item in form %}
  12.                                             <divclass="col-xs-10"><divclass="form-group"style="position: relative;margin-top: 20px"><label>{{ item.label }}</label>
  13.                                                     {{ item }}
  14.                                                     <spanclass="error_msg"style="color:red;position: absolute"></span></div></div>
  15.                                         {% endfor %}
  16.                                     </div></form></div></div></div><divclass="modal-footer"><buttontype="button"class="btn btn-default"data-dismiss="modal">取消</button><buttonid="btnSave"type="submit"class="btn btn-primary">保管</button></div></div></div><!-- 删除的对话框 --><divclass="modal fade"id="deleteModal"tabindex="-1"role="dialog"aria-labelledby="myModalLabel"><divclass="modal-dialog"role="document"><divclass="alert alert-danger alert-dismissible fade in"role="alert"><buttontype="button"class="close"data-dismiss="alert"aria-label="Close"><spanaria-hidden="true">×</span></button><h4>删除信息!</h4><pstyle="margin:10px 0;">删除后关联的数据将会一起被删除</p><pstyle="text-align: right"><buttonid="btnConfirmDelete"class="btn btn-danger">确定删除</button><buttonclass="btn btn-default"data-dismiss="modal">取消</button></p></div></div></div></div></div>
  17. {% endblock %}
  18. {% block js %}
  19.     <scripttype="text/javascript">letDELETE_ID;letEDIT_ID;$(function(){bindBtnAddEvent();bindBtnSaveEvent();bindBtndeleteEvent();bindBtnConfirmDeleteEvent();bindBtnEditEvent();})functionbindBtnAddEvent(){$('#btnAdd').click(function(){//将正在编辑的id设置为空EDIT_ID=undefined;//改title$("#myModalLabel").text("新建订单")// 每次翻开清空对话框中上一次输入的信息$("#formAdd")[0].reset();//点击新建按钮,显示对话框$('#myModal').modal('show')})}functionbindBtnSaveEvent(){{#向后台发送ajax恳求#}$("#btnSave").click(function(){{#点击之前,清空内容#}$(".error_msg").empty();
  20.                 $.ajax({url:"/order/add/",type:"POST",data:$("#formAdd").serialize()+"&order="+EDIT_ID,dataType:"JSON",success:function(res){if(res.status){{#alert("tscg!");#}// 每次翻开清空对话框中上一次输入的信息$("#formAdd")[0].reset();// 关闭对话框$("#myModal").modal('hide');//刷新展示列表
  21.                             location.reload();}else{{#把错误信息显示在span框中#}
  22.                             $.each(res.error,function(name, errorlist){$("#id_"+ name).next().text(errorlist[0]);})}}})})}//弹出删除框functionbindBtndeleteEvent(){$(".btn-delete").click(function(){$("#deleteModal").modal('show');//获得删除的idDELETE_ID=$(this).attr('uid');});}//删除内容functionbindBtnConfirmDeleteEvent(){$("#btnConfirmDelete").click(function(){
  23.                 $.ajax({url:"/order/delete/",type:"GET",dataType:"JSON",data:{"uid":DELETE_ID},success:function(res){if(res.status){//    alert("删除胜利!");//    //隐藏删除框//    $("#deleteModal").modal("hide");//    //删除内容//    $("tr[uid= '" + DELETE_ID + "']").remove();//    //删除id置空//    DELETE_ID = 0;
  24.                             location.reload();}else{alert(res.error);$("#deleteModal").modal("hide");DELETE_ID=0;}}})})}functionbindBtnEditEvent(){$(".btn-edit").click(function(){// 每次翻开清空对话框中上一次输入的信息$("#formAdd")[0].reset();//获得要编辑的idEDIT_ID=$(this).attr("uid")//发送ajax恳求去厚度按获得当前行相关数据
  25.                 $.ajax({url:"/order/detail/",type:"GET",dataType:"JSON",data:{"uid":EDIT_ID,},success:function(res){if(res.status){
  26.                             $.each(res.data,function(name, value){$("#id_"+ name).val(value);})//修改标题$("#myModalLabel").text("编辑");$("#myModal").modal("show");}else{alert(res.error);$("#myModal").modal("hide");
  27.                             location.reload();}}})})}</script>
  28. {% endblock %}
复制代码

回复

举报 使用道具

相关帖子
全部回复
暂无回帖,快来参与回复吧
本版积分规则 高级模式
B Color Image Link Quote Code Smilies

空城旧梦忆悲凉
注册会员
主题 22
回复 11
粉丝 0
|网站地图
快速回复 返回顶部 返回列表