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 的模型与模型之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

Django之模型ORM

Django模型和ORM

Django - 模型(model)-- ORM

ORM多表操作(object与queryset)

Django04-模型系统model

Django框架-Django模型(models)系统