Django之多对多查询与操作方法详解

多对多表之间关系表

models.py文件代码

from django.db import models

# Create your models here.

class Publisher(models.Model):
  id = models.AutoField(primary_key=True)
  name = models.CharField(max_length=64,null=False,unique=True)

  def __str__(self):
    return "publisher_name:{}".format(self.name)

class Book(models.Model):
  id = models.AutoField(primary_key=True)
  title = models.CharField(max_length=128,null=False)
  publisher = models.ForeignKey(to=Publisher,related_name="books")

  def __str__(self):
    return "book_title:{}".format(self.title)

class Author(models.Model):
  id = models.AutoField(primary_key=True)
  name = models.CharField(max_length=16,null=False)
  book = models.ManyToManyField(to="Book")

  def __str__(self):
    return "author_name:{}".format(self.name)

查询与操作方法代码

import os

if __name__ == '__main__':
  #加载Django项目的配置信息
  os.environ.setdefault("DJANGO_SETTINGS_MODULE","testinclude.settings")
  #导入Django,并启动Django项目
  import django
  django.setup()

  from ormtest import models

  #多对多查询
  #查询作者(小白),写过的所有书有那些
  author_obj = models.Author.objects.get(name="小白")
  print(author_obj)
  author_obj_books = author_obj.book.all()
  print(author_obj_books)

  #1.create(为小白作者对象创建一本书)
  #首先:在book表中创建一本书,并指定相应的出版社
  #然后:在作者和书的多联多系表中,自动添加一条关联记录
  author_obj.book.create(title="zabbix从入门到精通",publisher_id=3)

  #2.add(为小白作者,添加一本书(网络基础原理))
  book_obj = models.Book.objects.get(title="网络基础原理")
  author_obj.book.add(book_obj)

  #3.remove(为作者小白,删除一本书《网络基础原理》)
  #1、为作者小白,删除一本书<网络基础原理>
  book_obj = models.Book.objects.get(title="网络基础原理")
  author_obj.book.remove(book_obj)
  #为作者小白,删除一本书,书的id为4
  author_obj.book.remove(4)

  #4.clear(把作者为小白的关联的书,全部清空删除)
  author_obj.book.clear()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Django 标签筛选的实现代码(一对多、多对多)

    实现的目标(一对多) 实现针对课程实现:课程类型.难度级别.是否隐藏三个方式的筛选 每一个视频文件有针对一个课程类型.一个难度级别.是否隐藏 设计数据库如下: # 视频分类表格 class VideoType(models.Model): Video_Type = models.CharField(max_length=50) class Meta: verbose_name_plural = '视频分类' def __str__(self): return self.Video_Type #

  • Django中数据库的数据关系:一对一,一对多,多对多

    一对一: 一对一的关系极为一个数据仅对应一个数据,用下图的结构图可以帮助理解: 下面用代码实现一下,首先要创建工程项目如下: 接着,我们定义模型: 来到models.py文件,创建两个模型: from django.db import models # Create your models here. class One(models.Model): oname = models.CharField(max_length=20,null=True) oage = models.CharField

  • Django的数据模型访问多对多键值的方法

    这里先来借用一个书本(book)的数据模型作为例子: from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) address = models.CharField(max_length=50) city = models.CharField(max_length=60) state_province = models.CharField(max_lengt

  • Django之多对多查询与操作方法详解

    多对多表之间关系表 models.py文件代码 from django.db import models # Create your models here. class Publisher(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=64,null=False,unique=True) def __str__(self): return "publisher_

  • django ManyToManyField多对多关系的实例详解

    Django 的 ORM 有多种关系:一对一,多对一,多对多 各自定义的方式为 : 一对一: OneToOneField 多对一: ForeignKey 多对多: ManyToManyField 上边的描述太过数据而缺乏人性化,我们来更人性化一些: 多个属于一个,即 belong to : ForeignKey,多个属于一个 一个有一个,即 has one: OneToOneField 一个有很多个,即 has many: lots of A belong to B 与 B has many A

  • 在MyBatis中实现一对多查询和多对一查询的方式详解(各两种方式)

    目录 1.多对一 1.1环境搭建 1.2编写实体类. 1.3编写接口方法 1.4编写Mapper 1.5实现 1.6运行结果 2.一对多 2.1环境搭建和一对多一样 2.3编写接口的方法 2.4编写Mapper配置 2.5实现 2.6运行结果 1.多对一 1.1环境搭建 数据库 CREATE TABLE teacher ( id INT(10) NOT NULL, NAME VARCHAR(64) DEFAULT NULL, PRIMARY KEY (id), )ENGINE=INNODB DE

  • Django 多表关联 存储 使用方法详解 ManyToManyField save

    当models中使用ManyToManyField进行多表关联的时候,需要使用字段的add()方法来增加关联关系的一条记录,让两个实例关联起来才能顺利保存关联关系 #models.py 问题分类question_category和类别使用了多对多关系(先不管是否合理) #coding:utf-8 from django.db import models # Create your models here. class QuestionCategory(models.Model): categor

  • django基础之数据库操作方法(详解)

    Django 自称是"最适合开发有限期的完美WEB框架".本文参考<Django web开发指南>,快速搭建一个blog 出来,在中间涉及诸多知识点,这里不会详细说明,如果你是第一次接触Django ,本文会让你在感性上对Django有个认识,完成本文操作后会让你有兴趣阅读的相关书籍和文档. 本文客操作的环境,如无特别说明,后续都以下面的环境为基础: =================== Windows 7/10 python 3.5 Django 1.10 ======

  • Yii2中hasOne、hasMany及多对多关联查询的用法详解

    前言 hasOne.hasMany是Yii2特有的用于多表关联查询的函数,平时在使用多表关联查询的时候建议使用它们.为什么?因为这种方式关联查询出来的结果会保留Yii2自有的表头排序功能,以及CheckboxColumn中input的id存值,至于还有没有其它的好处就需要大家去挖掘了,笔者目前就发现了这两个常用的好处.其他的关联查询,像yiidbQuery查询或者原生的SQL语句查询都没有,查询出来在列表展示的时候,表头一排黑. Yii2的hasOne.hasMany多表关联查询,不管是文档还是

  • 对Django项目中的ORM映射与模糊查询的使用详解

    ORM映射 什么是ORM映射?在笔者认为就是对SQL语句的封装,所写语句与SQL对应语句含义相同,使开发更加简单方便,不过也是存在弊端的,使程序运行效率下降.例如: UserInfo.objects.get(id=2) 等于 select * from user_userinfo where id=2 修改管理器(models.py) 导入新的包:from django.db import models 进行模糊查询 开始进行查找前我们先来认识filter()方法. 这是一个过滤器方法用于过滤掉

  • Django ORM多对多查询方法(自定义第三张表&ManyToManyField)

    对于多对多表 - 1.自定义第三张表,更加灵活 - 2.ManyToManyField 自动生成第3张表 只能 有3列数据 不能自己添加. 自定义第三张表 # models.py class Boy(models.Model): name = models.CharField(max_length=32) class Girl(models.Model): name = models.CharField(max_length=32) class Love(models.Model): b = m

  • Django基于ORM操作数据库的方法详解

    本文实例讲述了Django基于ORM操作数据库的方法.分享给大家供大家参考,具体如下: 1.配置数据库 vim settings #HelloWorld/HelloWorld目录下 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', #mysql数据库中第一个库test 'NAME': 'test', 'USER': 'root', 'PASSWORD': '123456', 'HOST':'127.0.0.1', '

  • Pandas实现数据拼接的操作方法详解

    目录 merge 操作 merge 拼接方式 merge 举例 join 操作 join 举例 concat 操作 concat 举例 append 举例 数据科学领域日常使用 Python 处理大规模数据集的时候经常需要使用到合并.链接的方式进行数据集的整合,其中应用的数据类型包括 Series 和 DataFrame,可以使用的方法也很多,比如本文中介绍的 .merge(). .join() 和 .concat() 三种方法,进行拼接处理后的数据集可以发挥最大的用途. merge 操作 .m

随机推荐