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

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

原文地址:https://www.cnblogs.com/863652104kai/p/11359702.html

时间: 2024-11-06 09:58:20

如何用Django建关系表的相关文章

Django orm关系表的创建 、路由层以及视图层

一.Django 表关系的创建 1.表的对应关系 一对多 多对多 一对一 2.如何判断表的对应关系 利用换位思考的方式,分别站在两张表的角度上去思考 这里比如我们以图书管理系统为例来创建几个简单的表 图书表 出版社表 作者表 为了方便演示,这里我们就强行规定了表之间的关系: 图书和出版社是一对多的外键关系,一对多外键关系 将外键字段建在多的哪一张表上 图书与作者之间是多对多的外键关系,多对多的外键关系 外键字段无论建在那张表都可以,但是推荐你建在查询频率高的那张    表上 作者与作者与作者详情

表与表之间建关系

一.一对多 1.确立表与表之间的关系 一定要换位思考(必须两方都考虑周全之后才能得出结论) 以员工表和部门表为例: 1.先站在员工表看能否有多个员工对应一个部门 翻译过来: 一个部门能否有多个员工 可以!!!(暂时只能确定员工单向多对一部门) 2.再站在部门表看能否有多个部门对应一个员工 翻译过来: 一个员工能否属于多个部门 不可以!!! 结论:员工表和部门表之间仅仅是单向的多对一 那么它们的表关系就是"一对多" 表关系中没有多对一一说,只有一对多 (无论是多对一还是一对多都叫&quo

四、Django学习之关系表介绍及使用

关系表介绍及使用 一对一关系 xx = models.OneToOneField(to='表名',to_field='字段名',on_delete=models.CASCADE) #on_delete:删除时的一些级联效果,to_field可以不写,默认是关联到另一张表的主键,on_delete在1.x版本的django中不用写,默认是级联删除的,2.x版本的django要写. 增加数据 方式1 new_author_detail = models.AuthorDetail.objects.cr

Mysql数据库多对多关系未建新表

原则上,多对多关系是要新建一个关系表的,当遇到没有新建表的情况下如何查询多对多的SQL呢? FIND_IN_SET(str,strlist) 官网:http://dev.mysql.com/doc/refman/5.7/en/string-functions.html Mysql数据库 此数据库为设计不合理的demo,仅用来示范多对多关系. 创建表结构 -- 新建user表 CREATE TABLE `user` ( `id` INT(11) NOT NULL COMMENT '人员id', `

django的多表操作

django的多表操作 1.使用场景 在实际生产过程多,我们面对的数据纷繁复杂,此时就需要良好的数据结构设计,多表之间的约束关系为我们提供了数据管理以及查询的便利.在MYsql中我们利用外键(foreign key)来实现这样的约束关系,在django中我们通过调用相应的API来实现这样的功能. 2.创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄.作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系(

Django ORM 多表操作

创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email. 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-

第1章:Django建站基础

<玩转Django 2.0>第1章:Django建站基础 1.3网站运行原理: (1)网站中一些常用术语: 客户端:简称浏览器,如Chrome.Firefox和IE 服务器:能够连接到互联网,具有IP地址的计算机 IP地址:互联网协议地址,TCP/IP网络设备的数字标识符 域名:用于标识一个或多个IP地址 DNS:域名系统,用于跟踪计算机的域名及其在互联网上相应的IP地址 ISP:互联网服务提供商 TCP/IP:传输控制协议/互联网协议 HTTP:超文本传输协议 (2)网站运行原理 在浏览器中

Django 之多表查询 与多表的使用

1.django的多表查询 主要区分为: 正向查询    逆向查询 1. 多表查询: 是一个复杂的查询,他分为对象查询和__模糊查询两种方式 2. 多表查询: 又分为 一对一查询, 一对多查询, 多对多查询 三种方式 3. 多表查询: 分为正向查询 与 逆向查询, 正向查询 是根据 这个表中的外键属性名开始出发查询的跨表查询 逆向查询 是根据 根据关联表的 类名 小写 开始 进行跨表查询 4. 多表查询: 外键的存放位置如下: # 一对多:出版社(一) 书籍(多,外键在多的一方,依赖于出版社)

十一 .Django 多对多表ManyToManyField (ORM)

一. 多对多表ManyToManyField (ORM) https://www.cnblogs.com/yoyoketang/p/10580253.html 1.创建orm表 多对多手动创建第三张关系表联 # 表一 class User(models.Model): username=models.CharField(max_length=24,db_index=True) def __str__(self): return self.username # 表二 class Tag(model