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})
4. 编写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-primary" data-toggle="modal">
{# <button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal"></button>#}
</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>
</div>
<script src="{% static 'jquery-3.7.0.min.js' %}"></script>
<script src="{% static '/bootstrap/js/bootstrap.min.js' %}"></script>
<script type="text/javascript">
$(function () {
bindBtnAddEvent();
bindBtnSaveEvent();
})
function bindBtnAddEvent(){
$('#btnAdd').click(function () {
// 点击新建按钮 显示对话框
$('#myModal').modal('show');
});
}
function bindBtnSaveEvent(){
$('#btnSave').click(function () {
// 清楚所有的错误信息
$('.error-msg').empty()
// 向后台发送请求
$.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');
}else {
// 把错误信息显示在对话框中
$.each(res.error,function (name,errorList){
$("#id_"+name).next().text(errorList[0])
})
}
}
})
});
}
</script>
</body>
</html>