ORM 的模型与模型之间的关系
Posted 哩子吖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORM 的模型与模型之间的关系相关的知识,希望对你有一定的参考价值。
ORM 的模型与模型之间的关系
多对一关系
多个模型都与其中一个模型有关联,如:一个项目有多个接口,一个接口有多个测试用例
Project 模型的 modules 字段不会在数据库的表显示,用于表示Project 模型与 Module 模型之间的关系,查询project. module可得到该项目下关联的所有Model 数据,反之,查询module.project 可得到该模块下所关联的所有项目
ForeignKey 表示关联外表
增强代码可读性,分别在两个模型中添加关系字段,使用 back_populates 参数关联,
backref 和 back_populates的区别:
~ back_populates 需要双向显示声明,backref 只需在一个模型中声明
~ back_populates 较麻烦,backref 更简单
~ back_populates 更具有可读性,更容易知道各个表之间的关系
一对一关系
ORM多表操作(object与queryset)
ORM多表操作
一、创建模型
作者模型:一个作者有姓名和年龄。
作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息;作者详情模型和作者模型之间是一对一的关系。
出版商模型:出版商有名称,所在城市以及邮箱。
书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系;一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系。
from django.db import models class Author(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) age = models.IntegerField() # on_delete=models.CASCADE 当删除关联表中的数据时,与之关联也删除 authorDetail = models.OneToOneField(to="AuthorDetail", on_delete=models.CASCADE) class AuthorDetail(models.Model): id = models.AutoField(primary_key=True) birthday = models.DateField() telephone = models.BigIntegerField() address = models.CharField(max_length=64) class Publisher(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) city = models.CharField(max_length=32) email = models.EmailField() class Book(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=32) publishDate = models.DateField() price = models.DecimalField(max_digits=5, decimal_places=2) # 与Publish建立一对多的关系,外键字段一般建立在多的一方 publisher = models.ForeignKey(to="Publisher", to_field="id", on_delete=models.CASCADE) # 与Author表建立多对多的关系,ManyToManyField通常设置在正向查询多的那一边,自动创建第三张表 authors = models.ManyToManyField(to="Author")
二、插入测试数据
1
以上是关于ORM 的模型与模型之间的关系的主要内容,如果未能解决你的问题,请参考以下文章