django——Ajax(添加/编辑)

1. 创建Model

class Order(models.Model):
    odi = models.CharField(verbose_name='订单号', max_length=64)
    title = models.CharField(verbose_name='名称', max_length=32)
    price = models.IntegerField(verbose_name='价格')
    status_choices = (
        (1, '待支付'),
        (2, '已支付'),
    )
    status = models.SmallIntegerField(verbose_name='状态', choices=status_choices, default=1)
    admin = models.ForeignKey(verbose_name='管理员', to='loguser', on_delete=models.CASCADE)

2. 创建ModelForm

class orderModel(forms.ModelForm):
    class Meta:
        model = models.Order
        # fields = '__all__'
        exclude=["odi","admin"]
        labels={
            'title':'名称',
            'price':'价格',
            'status':'状态',

        },
        widgets={
            'title':forms.TextInput(attrs={'class':'form-control'}),
            'price':forms.NumberInput(attrs={'class':'form-control'}),
            'status':forms.Select(attrs={'class':'form-control'}),
        }

3. 在views模块中编写后端代码

from django.shortcuts import render, redirect, HttpResponse
from . import forms
from . import models
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
import random
from datetime import datetime

# 添加
@csrf_exempt
def order_add(request):
    form = forms.orderModel(request.POST)
    if form.is_valid():
        print(form.cleaned_data)
        form.instance.odi = datetime.now().strftime('%Y%m%d%H%M%S') + str(random.randint(1000, 9999))
        form.instance.admin_id=request.session['id']
        form.save()
        return JsonResponse({"status": True})

    return JsonResponse({"status": False, 'error': form.errors})

# 获取修改数据
def order_edit(request):
uid = request.GET.get('uid')
row_dict = models.Order.objects.filter(id=uid).values('title', 'price', 'status').first()
if not row_dict:
return JsonResponse({"status": False, 'error': '数据不存在'})
result = {
'status': True,
'data': row_dict,
}
return JsonResponse(result)
# 从数据库获取到对象


# 编辑订单
@csrf_exempt
def order_EditSave(request):
uid = request.GET.get("uid")
row_object = models.Order.objects.filter(id=uid).first()
if not row_object:
return JsonResponse({"status": False, 'tips': '数据不存在'})
form=forms.orderModel(request.POST,instance=row_object)
if form.is_valid():
form.save()
return JsonResponse({"status": True})
return JsonResponse({"status": False, 'error': form.errors})

4. 编写 url

path('order_add/',views.order_add),
path('order_edit/',views.order_edit),
path('order_EditSave/',views.order_EditSave),

5. 编辑 HTML 页面(新建/编辑)

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<link rel="stylesheet" type="text/css" href="{% static '/bootstrap/css/bootstrap.min.css' %}">

<body>
<div class="container ">
    <div>
        <!-- 新建点击按钮 -->
        <input type="button" id="btnAdd" value="新建订单" class="btn btn-success" data-toggle="modal">
{#        <button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal"></button>#}

    </div>


<div align="center">
<h1>数据列表</h1>
<hr>
{% csrf_token %}
    <table class="table table-hover">

        <thead>
        <tr>
            <td>id</td>
            <td>订单号</td>
            <td>名称</td>
            <td>价格</td>
            <td>状态</td>
            <td>管理员</td>
            <td>操作</td>
        </tr>
        </thead>
        <tbody>
        {% for i in obj %}
            <tr uid="{{ i.id }}">
                <td>{{ i.id }}</td>
                <td>{{ i.odi }}</td>
                <td>{{ i.title }}</td>
                <td>{{ i.price }}</td>
                <td>{{ i.get_status_display }}</td>
                <td>{{ i.admin.account }}</td>
                <td>
                    <input uid="{{ i.id }}" type="button"  class="btn btn-primary  btn-xs btn-edit" value="编辑" >
                
                </td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
</div>
</div>
<!-- 新建/编辑订单对话框 -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
        <h4 class="modal-title" id="myModalLabel">新建</h4>
      </div>
      <div class="modal-body">
        <form id="formAdd">
        <div class="clearfix">
            <div class="col-xs-6">
                <div class="form-group">
                    <label>{{ form.title.label }}</label>
                    {{ form.title }}
                    <span class="error-msg" style="color: red"></span>

                </div>
            </div>

            <div class="col-xs-6">
              <div class="form-group">
                    <label>{{ form.price.label }}</label>
                    {{ form.price }}
                    <span class="error-msg" style="color: red"></span>
              </div>
            </div>

            <div class="col-xs-6">
              <div class="form-group">
                    <label>{{ form.status.label }}</label>
                    {{ form.status }}
                    <span class="error-msg" style="color: red"></span>
              </div>
            </div>

            <div class="col-xs-6">
              <div class="form-group">
                    <label>{{ form.admin.label }}</label>
                    {{ form.admin }}
                    <span class="error-msg" style="color: red"></span>
              </div>
            </div>
        </div>
        </form>
      </div>
      <div class="modal-footer">
          <button id="btnSave" type="button" class="btn btn-primary">添加</button>
          <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>

      </div>
    </div>
  </div>
</div>
<script src="{% static 'jquery-3.7.0.min.js' %}"></script>
<script src="{% static '/bootstrap/js/bootstrap.min.js' %}"></script>
<script type="text/javascript">
    // 全局变量
    var EDIT_ID;
    $(function () {
        bindBtnAddEvent();
        bindBtnSaveEvent();
        bindBtnEditEvent();
    })
    function bindBtnAddEvent(){
        $('#btnAdd').click(function () {
            //将正在编辑的ID 置空
            EDIT_ID=undefined;

            // 清空对话框
            $("#formAdd")[0].reset();

            //修改标题
            $("#myModalLabel").text("新建");
            $("#btnSave").text("添加");

            // 点击新建按钮 显示对话框
            $('#myModal').modal('show');
        });
    }
    function bindBtnSaveEvent(){
        $('#btnSave').click(function () {
            // 清楚所有的错误信息
            $('.error-msg').empty()

            // 判断
            if(EDIT_ID){
                //编辑
                 doEdit();
            }else {
                //添加
                doAdd();
            }



        });
    }

// 新建
    function doAdd(){
         // 向后台发送请求(添加)
            $.ajax({
                url:"/order_add/",
                type:'post',
                data:$('#formAdd').serialize(),
                dataType:'JSON',
                success:function (res){
                    if (res.status){
                        alert('创建成功');

                        // 清空表单 ('#formAdd') jQuery 对象 ->  $('#formAdd')[0] DOM 对象
                        $('#formAdd')[0].reset();

                        // 关闭对话框
                        $('#myModal').modal('hide');

                        // 刷新页面
                        location.reload();
                    }else {
                        // 把错误信息显示在对话框中
                        $.each(res.error,function (name,errorList){
                            $("#id_"+name).next().text(errorList[0])
                        })
                    }
                }
            })
    }

// 编辑
    function doEdit() {
        // 发送 Ajax 去后台获取当前行的相关数据
            $.ajax({
                url:"/order_EditSave/?uid=" + EDIT_ID,
                type:'post',
                data:$('#formAdd').serialize(),
                dataType:'JSON',
                success:function (res){
                    if (res.status){

                        // 清空表单 ('#formAdd') jQuery 对象 ->  $('#formAdd')[0] DOM 对象
                        $('#formAdd')[0].reset();

                        // 关闭对话框
                        $('#myModal').modal('hide');

                        // 刷新页面
                        location.reload();
                    }else {
                        if(res.tips){
                            alert(res.tips);
                        }else {
                            // 把错误信息显示在对话框中
                        $.each(res.error,function (name,errorList){
                            $("#id_"+name).next().text(errorList[0]);
                        })

                        }
                    }
                }
            })
    }

    function bindBtnEditEvent(){
        $('.btn-edit').click(function () {
            // 清空对话框中的数据
            $("#formAdd")[0].reset();

            var uid=$(this).attr("uid");

            //赋值全局变量
            EDIT_ID=uid

           // 发送 Ajax 去后台获取当前行的相关数据
            $.ajax({
                url:"/order_edit/",
                type:"get",
                data:{
                    uid:uid
                },
                dataType:"JSON",
                success:function (res) {
                    if(res.status){
                        console.log(res.data);

                        // 将获取到的数据默认赋值到输入框中
                        $.each(res.data,function (name,value) {
                            $("#id_"+name).val(value);
                        })
                        // 修改标题
                         $("#myModalLabel").text("编辑");
                         $("#btnSave").text("修改");
                        // 点击编辑 显示模态框
                        $('#myModal').modal('show');
                    }else {
                        alert(res.error)
                    }
                }
            })

            // 在对话框中显示默认数据
        });
    }

</script>

</body>
</html>

  

  

posted @ 2023-10-20 10:27  jakub  阅读(131)  评论(0)    收藏  举报