day30

crm

from django.db import models
from django.contrib.auth.models import User

# Create your models here.

#客户信息表
class Customer(models.Model):
    test = models.CharField(max_length=32)
    name = models.CharField(max_length=32,blank=True,null=True)
    qq = models.CharField(max_length=64,unique=True)    #unique 字段唯一
    weixin = models.CharField(max_length=64,blank=True,null=True)
    age = models.PositiveSmallIntegerField(blank=True,null=True)
    gender = models.PositiveSmallIntegerField(choices=((0,‘Female‘),(1,‘Male‘)),blank=True,null=True)
    phone = models.PositiveIntegerField(blank=True,null=True)
    source_choices = (
        (0,‘商桥‘),
        (1,‘51CTO‘),
        (2,‘QQ群‘),
        (3,‘知乎‘),
        (4,‘SOGO‘),
        (5,‘转介绍‘),
        (6,‘其他‘),
    )

    source = models.SmallIntegerField(choices=source_choices)
    referral_from = models.ForeignKey("Customer",related_name="my_referrals",blank=True,null=True)
    consult_courses = models.ManyToManyField("Course")
    status_choices = ((0,‘已报名 ‘),(1,‘未报名‘),(2,‘已退学‘))
    status = models.SmallIntegerField(choices=status_choices)
    consultant = models.ForeignKey("UserProfile", verbose_name="课程顾问")
    date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

#学员报名信息(后面的学习记录,学员上课记录)
class Enrollment(models.Model):
    customer = models.ForeignKey(‘Customer‘)
    class_grade = models.ForeignKey(‘ClassList‘)
    enrollment_date = models.DateField()

    def __str__(self):
        return self.customer
    class Meta:
        unique_together = ("customer","class_grade")

#学员跟进记录
class FollowUpRecord(models.Model):
    customer = models.ForeignKey(‘Customer‘)
    content = models.TextField(max_length=1024)
    status =(
        (0,‘不报名‘),
        (1,‘一个月内报名‘),
        (2,‘两周内报名‘),
    )
    # consultant = models.Foreignkey("UserProfile",verbose_name="课程顾问")
    consultant = models.ForeignKey("UserProfile",verbose_name="课程顾问")
    date = models.DateTimeField(auto_now_add=True)

#课程表
class Course(models.Model):
    name = models.CharField(unique=True,max_length=64)
    price = models.PositiveIntegerField(default=198000)
    outline = models.TextField()

    def __str__(self):
        return self.name

#班级列表
class ClassList(models.Model):
    course = models.ForeignKey("Course")
    semester = models.PositiveSmallIntegerField()
    start_date = models.DateField()
    end_date = models.DateField()
    teachers = models.ManyToManyField("UserProfile")
    class_type_choices = ((0,‘脱产‘),(1,‘周末‘),(2,‘网络‘))
    branch= models.ForeignKey("Branch")

#每节课上课记录
class CourseRecord(models.Model):
    class_grade = models.ForeignKey("ClassList")
    day_number = models.PositiveSmallIntegerField(verbose_name="节次")
    teacher  = models.ForeignKey("UserProfile")
    CourseCoutent = models.TextField(verbose_name="课程内容",max_length=1024)
    # 有没有作业
    has_homework = models.BooleanField(default=True)
    # 作业标题
    homework_title = models.CharField(max_length=128,blank=True,null=True)
    #作业需求
    homework_requirement = models.CharField(verbose_name="作业需求",max_length=1025,blank=True,null=True)
    def __str__(self):
        return "%s dayum:%s"%(self.class_grade,self.day_number)

    class Meta:
        unique_together = ("class_grade","day_number")

#每个学生上的每节课的成绩记录
class StudyRecord(models.Model):
    course_record = models.ForeignKey("CourseRecord")
    student = models.ForeignKey("Enrollment")
    score_choices = ((100,"A+"),
                     (90,"A"),
                     (85,"B+"),
                     (80,"B"),
                     (75,"B-"),
                     (70,"C+"),
                     (65,"C"),
                     (40,"C-"),
                     (-20,"D"),
                     (-50,"COPY"),
                     (0,"N/A"),
                     )
    score = models.SmallIntegerField(choices=score_choices)
    show_status_choices = ((0,"缺勤"),(1,"已签到"),(2,"迟到"))
    grade_comment = models.TextField(max_length=1024,blank=True,null=True)
    def __str__(self):
        return "%s daynum:%s" %(self.student,self.day_number)
    class Meta:
        unique_together = ("course_record","student")

#员工
class UserProfile(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=32)
    roles = models.ManyToManyField("Role",blank=True,null=True)
    def __str__(self):
        return self.name

#角色表
class Role(models.Model):
    name = models.CharField(unique=True,max_length=32)
    menus = models.ManyToManyField("Menu")
    def __str__(self):
        return self.name

#分校
class Branch(models.Model):
    name = models.CharField(unique=True,max_length=128)
    def __str__(self):
        return self.name

#菜单表
class Menu(models.Model):
    name = models.CharField(unique=True,max_length=32)
    url_type = models.SmallIntegerField(choices=((0,‘relative_name‘),(1,‘absolute_url‘)))
    url_name = models.CharField(unique=True,max_length=128)
    def __str__(self):
        return self.name
时间: 2024-10-18 08:50:52

day30的相关文章

leetcode -day30 Reverse Linked List II

1.  Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2->5->NULL. Note: Given m, n satisfy the follow

Day30:IO模型

一.IO模型 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西.这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同.所以,为了更好的回答这个问题,先限定一下本文的上下文.本文讨论的背景是Linux

分布式监控系统开发【day30】:需求讨论

本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个简版的类Zabbix监控系统 –掌握自动化开发项目的程序设计思路及架构解藕原则 常用监控系统设计讨论 Zabbix Nagios 监控系统需求讨论 1.可监控常用系统服务.应用.网络设备等 2.一台主机上可监控多个不同服务.不同服务的监控间隔可不同 3.同一个服务在不同主机上的监控间隔.报警阈值可不同 4.可以批量的给一批主机添加.删除.修改要监控的服务

Summary Day30

1.内存管理 1.1 进程中的内存区域划分 代码区   只读常理区    全局区    BSS     堆   栈 1.2 字符串存储形式之间的比较 字符指针,字符数组,字符动态内存 1.3 虚拟内存管理技术 Unix/Linux系统总的内存都是采用虚拟内存管理技术进行管理,即:每个进程都有0~4G的内存地址 (虚拟的并不是真实存在的),由操作系统负责把内存地址和真实的物理内存映射起来,因此,不同进程 的内存地址看起来是一样的,但是所对应的物理内存是不一样的. 用户空间 0~3G, 虚拟内核空间

Day30:类的抽象、类的组合应用

一.抽象类 1.什么是抽象类 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化. 2.为什么要有抽象类 如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性. 比如我们有香蕉的类,有苹果的类,有桃子的类,从这些类抽取相同的内容就是水果这个抽象的类,你吃水果时,要么是吃一个具体的香蕉,要么是吃一个具体的桃子......你永远无法吃到一个叫做水果的东西. 从设计角度去看,如果类是从现实对象抽象而来的,那么抽象类就是基于类抽

框架 day30 Struts2练习项目-人员管理(增删改查)

Struts2练习项目人员管理 1案例名称: 人员管理系统:user manager system (ums) 2案例功能: *用户登录 -- xml校验.登录拦截器 *查询所有用户(条件查询) *添加(上传简历)-- token *编辑(下载) -- 标签回显 *查询 *删除(略) 3技术分析 4环境搭建 4.1jar包 *struts *dbutils *c3p0 *mysql 4.2配置文件 4.2.1struts.xml <?xml version="1.0" encod

day30 网络编程

subprocess模块: 这个模块的作用就是跟系统操作相关的调用系统命令,类似于os模块,比os更加强大.它本身自带一个管道,这个管道就类似于临时存储数据的的容器,把中间值存入里面, 然后当需要的时候就从中取出.取出的时候里面有多少就可以取出多少,同一份内容不会重复取出,意思就是只有一份内容,你反复执行取出操做,它只能给你倒出一次,倒完了就没有了. 然后管道里面的执行命令分为错误命令和正确命令,分别存储,用不同的关键字操作. import subprocess obj=subprocess.P

python—day30

补充:守护进程 守护进程例子: from multiprocessing import Process import time def foo(): print(123) time.sleep(1) print('end123') def bar(): print(456) time.sleep(3) print('end456') if __name__ == '__main__': p1 = Process(target=foo) p2 = Process(target=bar) p2.da

python 全栈开发,Day30(第一次面向对象考试)

月考题: python 全栈11期月考题 一 基础知识:(70分) 1.文件操作有哪些模式?请简述各模式的作用(2分) 2.详细说明tuple.list.dict的用法,以及它们的特点(3分) 3.解释生成器(generator)与函数的不同,并实现且使用简单generator(3分) 4.如何理解lambda函数/表达式(2分) 5.a=10 b=20 def test(a,b): print(a,b) c = test(b,a) print(c) 上述代码中,打印出来的值a,b,c分别是什么