03-models模型关系

from django.db import models


# 人 模型类
# 身份证 模型
# 关系: 一对一
# 主表(重要数据), 从表(声明关系)
class Person(models.Model):
    p_name = models.CharField(max_length=50)
    p_age = models.IntegerField()


class IDCard(models.Model):
    i_num = models.CharField(max_length=50)
    i_addr = models.CharField(max_length=255)

    # 关联(约束)
    # 通过外键实现,在外键中添加唯一约束(保证一对一)
    # 存的是person对象的id

    # 默认模式是 models.CASECADE: 删除级联数据
    # 默认情况: 当人删除时,身份证存在,人和身份证一起删除
    # 默认情况: 当人删除时,身份证不存在,人删除
    # i_person = models.OneToOneField(Person)


    # models.PROTECT保护模式: 级联数据存在,抛出异常; 级联数据不存在,直接删除;
    # 当人删除时,身份证存在,抛出异常
    # 当人删除时,身份证不存在,直接删除
    # i_person = models.OneToOneField(Person, on_delete=models.PROTECT)


    # model.SET_NULL 置空模式[该字段必须设置 允许为空]
    # 当人删除时,身份证存在,该属性设置null
    # 当人删除时,身份证不存在,直接删除
    # i_person = models.OneToOneField(Person, on_delete=models.SET_NULL, null=True)


    # model.SET_DEFAULT 置默认值模式
    i_person = models.OneToOneField(Person, on_delete=models.SET_DEFAULT, default=11)



# 班级 模型类
# 学生 模型类
# 关系: 一对多
# 一个班对应多个学生
class Grade(models.Model):
    g_name = models.CharField(max_length=50)

class Student(models.Model):
    s_name = models.CharField(max_length=50)
    s_score = models.IntegerField()
    s_detail = models.CharField(max_length=255)

    # 声明关系
    # 哪个班级的学生
    s_grade = models.ForeignKey(Grade,on_delete=models.SET_DEFAULT, default=1)



# 用户 模型类
# 商品 模型类
# 一个用户,可以收藏多个商品
# 一个商品,可以被多个用户收藏
# 关系: 多对多
class User(models.Model):
    u_name = models.CharField(max_length=50)
    u_tel = models.CharField(max_length=20)


class Goods(models.Model):
    g_name = models.CharField(max_length=50)
    g_price = models.IntegerField()

    # 声明关系
    g_user = models.ManyToManyField(User)

你可能感兴趣的:(03-models模型关系)