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

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

时间:2023-07-06 22:22:35浏览次数:32  
标签:... 多表 Author models Django Book 三种 Model class

一、全自动(不推荐)

  • 优点:django orm会自动创建第三张表
  • 缺点:只会创建两个表的关系字段,不会再额外添加字段,可扩展性差
    class Book(models.Model):
        # ...
        authors = models.ManyToManyField(to='Author')
        
    class Author(models.Model):
        # ...
        pass

     

二、纯手动(不推荐)

  • 优点:第三张表可以根据自己的要求随意添加额外的字段
  • 缺点:orm在查询的时候,很多方法不支持,查询非常麻烦
class Book(models.Model):
    # ...
    pass
    
class Author(models.Model):
    # ...
    pass
    
class Book_Author(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')
    # ...
    pass

三、半自动

  • 优点:手动建表,但要告诉orm第三张表是自己建的,orm只需要提供查询方法
  • 缺点:虽然可以使用orm的查询方法,但不支持使用add(), set(), remove(), clear()
class Book(models.Model):
    # ...
    authors = models.ManyToManyField(to='Author', through='Book_Author', through_fields=('book', 'author'))

class Author(models.Model):
    # ...

    
class Book_Author(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')
    # ....

 

说明:

  • 半自动在创建外键的时候,要添加两个参数,through='关系表名‘和through_fiedls=('此表在关系表中字段名‘, '关联表在关系表中的字段名')
  • through_fiedls中的字段顺序:第三张表通过哪个字段查询单表,就把哪个字段放在前面
  • 方法三的好处:在项目后续迭代更新中,如果有需求,可向关系表中增加字段,给自己留条后路

标签:...,多表,Author,models,Django,Book,三种,Model,class
From: https://www.cnblogs.com/Durant0420/p/17533480.html

相关文章

  • Django restframwork中使用分页及实现自定义分页
    关于为何要分页以及如何在Django+Template架构中如何使用分页,可以参考之前的文章django自定义分页类和使用总结[1]DjangoRestFramework中分页限制今天开篇我们先不讲如何使用,我们先说Django+restframework实现前后端分离项目开发时,分页功能使用的限制?缘由是之前在开发运维......
  • django中使用form表单或者ajax提交数据时如何验证csrftoken
    使用form表单来提交数据时,如何验证csrftokenajax提交数据时验证csrftoken在需要提交的html页面引入以下js文件就行引入csrf.js文件<scriptsrc="{%static'js/csrf.js'%}"></script>文件内容:/***根据cookie的name获取对应的值*@paramname*@returns{null}......
  • Django REST framework drf 后端分页
    使用view.pyfromrest_frameworkimportpaginationclassdefault_pagination(pagination.PageNumberPagination):page_size=15#分页的条数page_query_param='page'page_size_query_param='size' classrun_sh(generics.ListCreate......
  • Django 用户权限 组权限
    创建权限fromusers.modelsimportUserfromdjango.contrib.auth.modelsimportUser,Permission,Groupfromdjango.contrib.contenttypes.modelsimportContentType#决定在那个app.models.pycontent_type=ContentType.objects.get_for_model(User)#添加权限perm=......
  • Django 数据库操作
    查询models.UserInfo.objects.all()models.UserInfo.objects.all().values('user')#只取user列models.UserInfo.objects.all().values_list('id','user')#取出id和user列,并生成一个列表models.UserInfo.objects.get(id=1)models.UserInfo.objects.get(u......
  • Oracle日期加减的三种方式
     文章目录第一种,直接加减数字。第二种,使用add_months()函数。第三种,使用interval()函数。第一种,直接加减数字。selectsysdate当前时间,sysdate+1加一天,sysdate-1减一天,......
  • RunnerGo 新增对WebSocket、dubbo、TCP/IP三种协议的API测试
    大家好,RunnerGo作为一款一站式测试平台不断为用户提供更好的使用体验,最近得知RunnerGo新增对,WebSocket、Dubbo、TCP/IP,三种协议API的测试支持,本篇文章跟大家分享一下使用方法。WebSocket协议WebSocket是一种在单个TCP连接上进行全双工通信的API技术。相比于传统的HTTP......
  • Vue, Django | 数据可视化平台开发
    给公司搞了个互联网设备可视化平台,在地图上展示互联网设备的信息,点击地图不同区域,统计相应的设备信息,生成图表展示出来用的vue-big-screen框架,在原框架基础上,主要干了下面几件事:1.下载不同区域的geojson数据,点击大图的不同区域,调用mapclick方法,将子区域的geojson数据加载出来2......
  • Nginx+Uwsgi+Django+Mysql部署项目
    第一章、准备工作第1节、创建项目目录准备好项目代码,将代码上传至myprojectmkdirmyproject第2节、安装python3cd/usr/local/mkdirPythonwgethttps://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgztar-zxvfPython-3.8.0.tgzmkdir/usr/local/Python/py3_p......
  • Python Django 零基础从零到一部署服务,Hello Django!全文件夹目录和核心代码!
    在这篇文章中,我将手把手地教你如何从零开始部署一个使用Django框架的Python服务。无论你是一个刚开始接触开发的新手,还是一个有经验的开发者想要快速了解Django,这篇教程都会为你提供一条清晰的路径。我们将从环境搭建开始,一步一步地创建一个可以处理GET和POST请求的服务,让你能在实......