django框架模型系统(三)-----常用的字段类型以及表关系的实现

一、常用的字段类型

在这里插入图片描述

字段类型详细解释
IntegerField整型,映射到数据库中的类型
CharField字符类型,对应varchar类型,通过max_length指定最大长度
TextField文本类型,对应text类型
BooleanField布尔类型,对应tinyint类型,在使用的时候,传递True/False
DateField日期类型,没有时间,对应date类型,在使用的时候,可设置auto_now:每次保存对象时,自动设置该字段为当前日期或auto_now_add:当对象第一次创建时自动设置当前时间,以后不会再发生改变,设置为True或False
DateTimeField日期时间类型,映射到数据库中的datetime类型,在使用的时候,传递datetime.datetime()进去
Field的常用参数解释说明
primary_key指定是否为主键
unique指定是否唯一
null指定是否为空,默认为False
blank等于True时form表单验证时可以为空,默认为False
default设置默认值

二、表关系的实现

					数据库层面				模型类层面
一对一    ----->       外键   	----->    OneToOneField
一对多    ----->    外键 + 唯一键  ----->   ForeignKeyField
多对多  	----->  中间表:外键 + 联合唯一 ----->   ManyToManyField
  • 表关系实现案例
						一对一
	学生信息表     <---------------->		学生详细信息表
						一对多
	学院信息表     <---------------->		学生信息表
						多对多
	  课程表      <---------------->		学生信息表
  • 创建模型类(在app student/models.py中)
from django.db import models

# Create your models here.


class Student(models.Model):	# 学生信息表
    name = models.CharField(max_length=20)
    age = models.IntegerField()
    sex = models.SmallIntegerField(default=0)
    grade = models.ForeignKey('Grade', on_delete=models.SET_NULL, null=True)

    def __str__(self):
        return '%s-%s' % (self.name, self.age)


class StudentDetail(models.Model):  # 学生详细信息表,一对一表关系的实现
    num = models.CharField(verbose_name='学号', max_length=20, default='')
    college = models.CharField(verbose_name='毕业院校', max_length=30, default='')
    # on_delete = models.CASCADE:级联操作,你删我就删
    student = models.OneToOneField('Student', on_delete=models.CASCADE)


class Grade(models.Model):  # 学员信息表,一对多表关系的实现
    num = models.CharField(verbose_name='班期', max_length=30)
    name = models.CharField(verbose_name='学院名称', max_length=30)

    def __str__(self):
        return '%s-%s' % (self.num, self.name)


class Course(models.Model):     # 课程表,多对多表关系的实现
    name = models.CharField(verbose_name='课程名称', max_length=30)
    students = models.ManyToManyField('Student', through='Enroll')
	
	def __str__(self):
        return 'Course: %s' % self.name


class Enroll(models.Model):     # 中间表,多对多关系用中间表来实现
    student = models.ForeignKey('Student', on_delete=models.CASCADE)
    course = models.ForeignKey('Course', on_delete=models.CASCADE)
    pay = models.FloatField(verbose_name='缴费金额', default=0)
    c_time = models.DateTimeField(verbose_name='报名时间', auto_now_add=True)
  • 在虚拟环境中的项目目录下,创建迁移并执行迁移
# 创建迁移命令
python manage.py makemigrations
# 执行迁移命令
python manage.py migrate
  • 到数据库中查看,如下图所示,五张表已创建好!!!
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值