• 如何用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建立关系表,自带了联合唯一约束,会自动建立关系表,但是关系表中只有两个字段,不能添加其他字段,比较死板。

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

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

  • 相关阅读:
    JavaScript:事件
    JavaScript系统对象
    DOM基础:table(表格)
    DOM基础
    Cookie的简单实用
    javascript:变量的作用域
    javascript:没有定义的变量和没有定义的属性
    数组的基本使用
    静态代码块、代码块、构造函数、匿名内部类、匿名内部类中的代码块
    java使用指定的国际化文件
  • 原文地址:https://www.cnblogs.com/863652104kai/p/11359702.html
Copyright © 2020-2023  润新知