如何用Django建关系表

在models.py文件中通过定义类来创建表

创建一对一关系表

员工信息表:id、姓名、年龄

工资表:id、员工id、薪资(员工id与员工信息表的id一一对应)

class UserInfo(models.Model):
    name = models.CharField(max_length=32,null=True)
    age = models.IntegerField()

class Private(models.Model):
    salary = models.CharField(max_length=32,null=True)
    sp = models.OneToOneField('UserInfo')  # OneToOneField对应员工表信息表的id

创建一对多关系表

班级表:id、班级名称

学生表:id、学生姓名、所在班级(关联班级表id)

class Classes(models.Model):
    cname = models.CharField(max_length=32,null=True)
    
class Student(models.Model):
    sname = models.CharField(max_length=32,null=True)
    sc = models.ForeignKey('Classes')  # 通过ForeignKey外键关联班级表的id

创建多对多关系表

男生表:id、姓名

女生表:id、姓名

相亲记录表:id、男生id、女生id

# 方式一:通过ManyToManyField建立多对多关系表
class Boy(models.Model):
    bname = models.CharField(max_length=32,null=True)
    g = models.ManyToManyField('Girl',null=True)  

class Girl(models.Model):
    gname = models.CharField(max_length=32,null=True)
    
# 方式二:自定义关系表
class Boy(models.Model):
    bname = models.CharField(max_length=32,null=True)

class Girl(models.Model):
    gname = models.CharField(max_length=32,null=True)

class Boy2Girl(models.Model):
    b_id = models.ForeignKey('Boy')  # 外键关联Boy表中的id
    g_id = models.ForeignKey('Girl')  # 外键关联Girl表中的id

    class Meta:
        # 建立联合唯一索引
        unique_together = [
            ('b_id','g_id')
        ]
        """
        # 这是建立联合索引
        index_together=[
            ('b_id','g_id')
        ]"""
  • 方式一通过ManyToManyField建立关系表,自带了联合唯一约束,会自动建立关系表,但是关系表中只有两个字段,不能添加其他字段,比较死板。

  • 方式二自定义关系表可以添加其他字段,相对灵活。

可根据业务需求选择使用,但推荐使用自定义方式建表

posted @ 2019-08-15 18:22  Never&say&die  阅读(324)  评论(0编辑  收藏  举报