Django模型
模型是用来创建数据库的,定义一个类,该类继承了models.Model,类名代表了表名,也可以自己命名.模型实例:创建一个学生模型
from django.db import models
class Student(models.Model):
stu_name = models.CharField(max_length=10)
stu_sex = models.BooleanField()
stu_birth = models.DateField()
#给表取名字
class Meta:
db_table = 'stu'
想要在数据库生成表,先设置好setting.py里的配置数据库的东西。命令1:python manage.py makemigrations(迁移表),命令2:python manage.py migrate (数据库生成表)
模型的字段
- CharField(参数:max_length) 【 表示字符串】
- BooleanField() 【布尔类型,常用来保存性别,男为1,女为0】
- AutoField () 【表示自动增长】
- DateTimeField(参数1:auto_now_add =True 参数2:auto_now =True)【表示年月日,日期,参数表示第一次创建时的时间,参数2表示每次修改时的时间】
- DateField() 【表示年月日,日期】
- DecimaField(参数1:max_digits 参数2:dcimal_places)【用来表示成绩,最大为99.9,参数1:表示总的位数,参数2表示:小数后面多少位】
- TextField() 【保存文本信息】
- IntegerField() 【保存整数】
- FloatField() 【保存浮点数】
- FileField() 【文件上传字段】
- ImageField(参数1:upload_to=” “) 【上传图片 参数1:指定文件上传路径】
- stuname = models.CharField(max_length=6,null=True,blank=True) null 设置是否为空,针对数据库中,该字段是否为空
blank 设置是否为空,针对表单提交,该字段是否为空 - stuname = models.CharField(primary_key=True,unique=True) 【primary_key 表示这是主键,unique表示这是唯一的】
模型关系
- 两张表一对一的关系关联:学生表和学生扩展表
学生表
from django.db import models
class Student(models.Model):
stu_name = models.CharField(max_length=10)
stu_sex = models.BooleahFiels()
class Meta:
db_table = 'stu'
学生扩展表
class StudentInfo(models.Model):
stu_addr = models.CharField(max_length)
stu_age = models.IntegerField()
# 该字段实现 两张表一对一的关联 关键字:**OneToOneField**
stu = models.OneToOneField(Student, on_delete=models.CASCADE)
- 两张表一对多的关联:学生表和班级表
学生表
关联的字段要放在“多”的模型类中,比如 班级表和学生表,就要放在学生表的模型中
from django.db import models
class Student(models.Model):
stu_name = models.CharField(max_length=10)
stu_sex = models.BooleahFiels()
# 该字段 实现两张表一对多的关系 关键字:Foreignkey
g = models.Foreignkey(Grade,null=True)
class Meta:
db_table = 'stu'
班级表
class Grade(models.Model):
g_name = models.CharFiled(max_length=10)
g_desc = models.CharFiled(max_length=255)
class Meta:
db_table = 'grade'
- 两张表多对多的关联:购物人表和物品表
两张表多对多关联就需要一张中间表,在一个模型中使用了(ManyToManyField),就会自动创建一个中间表
购物人表
class GoodsUser(models.Model):
u_name = models.CharField(max_length=10)
class Meta:
db_table = 'good_user'
物品表
class Goods(models.Model):
g_name = models.CharField(max_length=10)
# 该字段 实现了两张表多对多的关联,并且会创建一个中间表 关键字(ManyToManyField)
g_user = models.ManyToManyField(GoodsUser)
class Meta:
db_table = 'goods'
中间表如图所示: