首页 > 其他分享 >Django 多对多表关系的两种创建方式

Django 多对多表关系的两种创建方式

时间:2022-12-09 14:14:20浏览次数:34  
标签:多表 Author models 创建 Django max CharField Model class

第一种:自动创建

# django orm 自动帮我们创建第三张表,我的app名字是app01, 表名为:app01_book_authors
# 这种方式可以让Django迅速的帮我们建一张关系表出来,好处是可以通过这张表进行跨表查询,坏处是一张虚拟表,拓展性差。

# 书籍表
class Book(models.Model):
    name = models.CharField(max_length=32)
    authors = models.ManyToManyField(to='Author')

# 作者表
class Author(models.Model):
    name = models.CharField(max_length=32)

 

第二种:半自动创建

# 可扩展性高,并且能够符合orm查询

class Book(models.Model):
    name = models.CharField(max_length=32)
    # 第三种创建表的方式
    authors = models.ManyToManyField(to='Author', through='Book2Author', through_fields=('book', 'author'))
    # through 告诉 django orm 书籍表和作者表的多对多关系是通过 Book2Author 表来记录的
    # through fields 告诉 django orm 记录关系是用 Book2Author 表中的 book 字段 和 author字段 来记录的
    # 此关系在哪张表写的,through_fields中就优先写哪张表(那个字段)的小写
    # 但是,多对多字段的 add set remove clear 四个方法就用不了了


class Author(models.Model):
    name = models.CharField(max_length=32)class Book2Author(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')
    info = models.CharField(max_length=32)

标签:多表,Author,models,创建,Django,max,CharField,Model,class
From: https://www.cnblogs.com/wfw001-2018/p/16968752.html

相关文章

  • [附源码]Python计算机毕业设计Django疫情物资管理系统
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • 创建springboot过滤器
    springboot过滤器importorg.springframework.core.ParameterizedTypeReference;importorg.springframework.web.context.WebApplicationContext;importorg.springframewo......
  • mac Django 连接mysql
    目录macdjango2.2正确连接mysql方式问题描述macdjango2.2正确连接mysql方式macDjango电脑连接mysql时候会出现一些错误,因为版本问题。以下操作Django2.2.22亲测有效......
  • 基于Python+Django+Vue+MYSQL的社团管理系统
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • threeJs 创建文字方式
    一,使用 TextGeometry创建3D文字1.需加载字体配合使用,使用THREE.FontLoader//加载字体loadFont(){returnnewPromise(function(resolve,reject){......
  • Django网站开发下
    文章目录​​1mysql版本太低的bug​​​​安装一些需要的应用​​​​<1>退出虚拟环境​​​​<2>supervisor​​​​<3>在虚拟环境安装gunicorn​​​​<4>在项目根......
  • python之路45 初识django框架
    纯手撸web框架1.web框架的本质理解1:连接前端与数据库的中间介质理解2:socket服务端2.手写web框架1.编写socket服务端代码2.浏览器访问响应无效>>>:HTTP......
  • web框架和django简介
    纯手撸web框架基于wsgiref模块代码封装优化动静态网页jinja2模板语法python主流web框架django框架简介django基本操作命令django小白必会三板斧......
  • 初识Django
    初识Django前言:本章主要是对web框架做一个基础了解,为了接下来学习前端框架做铺垫必备知识点:什么是路由路由简单的来说就是根据用户请求的URL链接来判断对应的处理......
  • Threejs:创建矩阵
     设置顶点创建矩形constgeometry3=newTHREE.BufferGeometry();constvertices=newFloat32Array([-1.0,-1.0,1.0,1.0,-1.0,1.0,1.0,1.0,1.0,......