django - 模型 - 关联关系

django - 模型 - 关联关系

一、一对一 (OneToOne)

  • MySQL:一对一 建表

    1. 外键

      create table t_user(
          id int primary key auto_increment ,
      	....
      );
      
      create table t_user_info (
      	id int primary key auto_increment ,
      	...
      	user_id int unique ,
      	contraint 外键名 foreign key(user_id) references t_user(id)
      )
      
    2. 共享主键

      create table t_user(
          id int primary key auto_increment ,
      	....
      );
      
      create table t_user_info (
      
         id int primary key ,
         ...
         contraint 外键名 foregin key(id) references t_user(id)
      )
      
  • django 模型:定义一对一的关联关系 (OneToOneField)
    stu = models.OneToOneField(to=Student, on_delete=models.CASCADE, blank=True)

OneToOne的操作

stu = Student.objects.create(name="", …)
Computer.objects.create(name=“电脑”, stu=stu)

二、多对一 (ManyToOne)

  • MySQL:在 的一方维护 的一方的关系

  • django 模型:
    school = models.ForeignKey(to=School, on_delete=models.CASCADE , blank=True, null=True)

ManyToOne的操作

school = School.objects.create(name=“xxx”)
stu = Student.objects.create(name…, school=school)

三、多对多 (ManyToMany)

  • MySQL:多对多维护关系,中间表维护关系

    create table t_student(
      ...
    )
    
    create table t_teacher(
       ...
    )
    
    create table t_teacher_student(
       tea_id int ,
       stu_id int ,
       primary key(tea_id , stu_id)
    )
    
    create table t_teacher_student(
       int int primary key auto_increment ,
       tea_id int ,
       stu_id int ,
    );
    
  • django 模型:
    students = models.ManyToManyField(to=Student, db_table="中间表表名", blank=True)

ps:中间表默认建表的规则是应用名_类名_关系属性名,表中关系字段的名字为模型名小写_id,并在中间表中,存在一个主键 id 字段。

ManyToMany 的操作

teacher = Teacher.objects.create(name=“xx”)
queryset = Student.objects.all()
teacher.students.set(queryset)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值