from django.db import models # Create your models here. # 创建应用的表结构,全部继承django中的models.Model来创建 # 创建或修改的表结构,都要用数据迁移命令来执行一次 # 1.python manage.py makemigrations # 2.python manage.py migrate class Department(models.Model): """ 部门表 verbose_name:注解 """ title = models.CharField(verbose_name='部门名称', max_length=32) # 定制在前端要显示的内容,用于在前端关联查询的结果,不然会返回一个对象 # 这个显示会在ModelForm中使用到 def __str__(self): return self.title class UserInfo(models.Model): """ 员工表 """ name = models.CharField(verbose_name='姓名', max_length=16) password = models.CharField(verbose_name='密码', max_length=64) age = models.IntegerField(verbose_name='年龄') # max_digits最大几位数,decimal_places小数点后几位,default默认值为0 account = models.DecimalField(verbose_name='帐户余额', max_digits=10, decimal_places=2, default=0) # create_time = models.DateTimeField(verbose_name='入职时间') create_time = models.DateField(verbose_name='入职时间') # 有约束 # 创建一个与Department表id有约束关系的列 # 在Django底层会将depart变量自动生成列名为depart_id的字段名 # 1.有约束并且级联删除 # - to :关联哪个表 # - to_field : 关联哪个字段 # - on_delete=models.CASCADE : 级联删除,部门删除后,该部门的员工也删除 depart = models.ForeignKey(verbose_name='部门ID', to='Department', to_field='id', on_delete=models.CASCADE) # 2.有约束,可以置空,删除部门后,员工不删除,并且将列置空 # - null=True,blank=True 该列可以为空 # - on_delete=models.SET_NULL 该列可以为空 # depart = models.ForeignKey(verbose_name='部门ID', to='Department', to_field='id', null=True,blank=True,on_delete=models.SET_NULL) # 在django中做约束 # 定义一个元组 # 参数 # - choices参数来判断性别显示 gender_choices = ( (1, '男'), (2, '女') ) gender = models.SmallIntegerField(verbose_name='性别', choices=gender_choices) class PrettyNumber(models.Model): """ 靓号管理 """ mobile = models.CharField(verbose_name='号码', max_length=11) price = models.DecimalField(verbose_name='价格', max_digits=10, decimal_places=2, default=0, null=True, blank=True) level_choices = ( (1, '1级靓号'), (2, '2级靓号'), (3, '3级靓号'), (4, '4级靓号'), (5, '5级靓号'), ) level = models.SmallIntegerField(verbose_name='靓号级别', choices=level_choices, default=1) status_choices = ( (True, '已占用'), (False, '未占用'), ) status = models.BooleanField(verbose_name='状态', choices=status_choices, default=False) class Admin(models.Model): """ 管理员表 verbose_name:注解 """ username = models.CharField(verbose_name='管理员', max_length=32) password = models.CharField(verbose_name='密码', max_length=64) # 返回管理员的姓名,此功能在task.py中使用了,不然下拉框显示的就是对象 def __str__(self): return self.username class Task(models.Model): """ 任务 主要为了测试ajax的使用 """ level_choice = { (1, '特提'), (2, '平急'), (3, '一般'), } level = models.SmallIntegerField(verbose_name='级别', choices=level_choice, default=3) title = models.CharField(verbose_name='标题', max_length=64) detail = models.TextField(verbose_name='详细信息') # CASCADE 级联删除 # to 关联表 # to_field 可不用写 user = models.ForeignKey(verbose_name='任务负责人', to='Admin', to_field='id', on_delete=models.CASCADE) class Order(models.Model): """ 订单 """ oid = models.CharField(verbose_name='订单号', max_length=64) title = models.CharField(verbose_name='商品名称', max_length=64) price = models.IntegerField(verbose_name='价格') status_choice = { (1, '待支付'), (2, '已支付'), } status = models.SmallIntegerField(verbose_name='状态', choices=status_choice, default=1) # 设置级联删除 user = models.ForeignKey(verbose_name='订单用户', to='Admin', on_delete=models.CASCADE) class Boss(models.Model): """ 一个测试使用的表,用于测试文件上件使用 基于 Form""" name = models.CharField(verbose_name='姓名', max_length=64) age = models.IntegerField(verbose_name='年龄') img = models.CharField(verbose_name='头像', max_length=128) class City(models.Model): """ 一个测试使用的表,用于测试文件上件使用 基于modelForm """ name = models.CharField(verbose_name='城市', max_length=64) count = models.IntegerField(verbose_name='人口') # 本质上还是CharField,区别在于上传文件并保存的事情由Django来做不需要写代码 # upload_to 是保存的文件夹名称,是media目录中已存在的目录 img = models.FileField(verbose_name='Logo', max_length=128,upload_to='upload/')