django_project_demo/app/models.py

146 lines
5.2 KiB
Python
Raw Normal View History

2024-08-24 11:25:23 +08:00
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/')