django_project_demo/app/models.py
2024-08-24 03:25:23 +00:00

146 lines
5.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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/')