146 lines
5.2 KiB
Python
146 lines
5.2 KiB
Python
|
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/')
|