10、案例-客户关系管理系统之增删改查
一、建立模型
1、导入模型
from django.db import models
2、创建学生表
class Student(models.Model): # 学生表
name = models.CharField(max_length=20)
age = models.SmallIntegerField()
sex = models.SmallIntegerField(default=1)
qq = models.CharField(max_length=20, unique=True)
phone = models.CharField(max_length=20, unique=True)
c_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
e_time = models.DateTimeField(verbose_name='修改时间',auto_now=True)
grade = models.ForeignKey('Grade', on_delete=models.SET_NULL, null=True)
is_delete = models.BooleanField(default=False) # 一般实际开发过程中,我们不会直接删除数据,而是给数据加上is_delete字段,来标记数据的状态。
def __str__(self):
return '%s-%s-%s' % (self.name, self.age, self.sex)
3、创建学生详情表
class StudentDetail(models.Model): #学生详情表
num = models.CharField('身份证', max_length=40, unique=True)
college = models.CharField('毕业学校', max_length=20, default='')
student = models.OneToOneField('Student', on_delete=models.CASCADE, related_name='detail')
def __str__(self):
return '%s-%s' % (self.num, self.college)
4、创建班级表
class Grade(models.Model): # 班级表
name = models.CharField('班级名称', max_length=20)
num = models.CharField('班期', max_length=20)
def __str__(self):
return '%s-%s' % (self.name, self.num)
5、创建课程表
class Course(models.Model): # 课程表
name = models.CharField('课程名称', max_length=20)
student = models.ManyToManyField('Student', through='Enroll')
def __str__(self):
return '%s' % self.name
6、创建学生表与课程表的中间表
class Enroll(models.Model): # 课程与学生多对多中间表
student = models.ForeignKey('Student', on_delete=models.CASCADE)
course = models.ForeignKey('Course', on_delete=models.CASCADE)
pay = models.FloatField('缴费金额', default=0)
c_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
def __str__(self):
return '%s' % self.pay
二、增删改查功能实现
1、index页面视图函数
from django.shortcuts import render, redirect,reverse
from django.http import HttpResponse
from student.models import Student, Grade, StudentDetail
from django.db.models import Q
from django.core.paginator import Paginator
# Create your views here.
def index(request):
section = '学生列表'
search = request.POST.get('search', '').strip() # 接收从html的form表单传过来的参数
if search:
if search.isdigit(): # 如果是数值类型则
sts = Student.objects.filter(Q(qq=search) | Q(phone=search), is_delete=False) # 用qq和phone去匹配
else: # 如果是字符型
sts = Student.objects.filter(name=search, is_delete=False) # 则和名字匹配
else: # search都没有匹配到则查询所有学生
sts = Student.objects.filter(is_delete=False)
sts = sts.order_by('-c_time') # 排序
return render(request,