首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Django Graphene中创建或更新更新多-多关系

在Django Graphene中创建或更新多对多关系,可以通过以下步骤实现:

  1. 首先,确保你已经安装了Django和Graphene,并且已经创建了相应的模型和类型。
  2. 在你的模型中定义多对多关系。例如,假设你有两个模型:User和Group,它们之间存在多对多关系。
代码语言:txt
复制
from django.db import models

class User(models.Model):
    name = models.CharField(max_length=100)
    groups = models.ManyToManyField('Group')

class Group(models.Model):
    name = models.CharField(max_length=100)
  1. 在你的类型中定义多对多关系。使用Graphene的DjangoObjectType来创建类型,并在类型中定义多对多字段。
代码语言:txt
复制
import graphene
from graphene_django import DjangoObjectType
from .models import User, Group

class UserType(DjangoObjectType):
    class Meta:
        model = User

class GroupType(DjangoObjectType):
    class Meta:
        model = Group

class Query(graphene.ObjectType):
    users = graphene.List(UserType)
    groups = graphene.List(GroupType)

    def resolve_users(self, info):
        return User.objects.all()

    def resolve_groups(self, info):
        return Group.objects.all()

schema = graphene.Schema(query=Query)
  1. 创建或更新多对多关系的解析器。在你的解析器中,你可以使用Django的ORM方法来创建或更新多对多关系。
代码语言:txt
复制
class CreateUser(graphene.Mutation):
    class Arguments:
        name = graphene.String(required=True)
        group_ids = graphene.List(graphene.Int, required=True)

    user = graphene.Field(UserType)

    def mutate(self, info, name, group_ids):
        user = User.objects.create(name=name)
        user.groups.set(group_ids)
        user.save()

        return CreateUser(user=user)

class UpdateUser(graphene.Mutation):
    class Arguments:
        user_id = graphene.Int(required=True)
        group_ids = graphene.List(graphene.Int, required=True)

    user = graphene.Field(UserType)

    def mutate(self, info, user_id, group_ids):
        user = User.objects.get(id=user_id)
        user.groups.set(group_ids)
        user.save()

        return UpdateUser(user=user)

class Mutation(graphene.ObjectType):
    create_user = CreateUser.Field()
    update_user = UpdateUser.Field()

schema = graphene.Schema(query=Query, mutation=Mutation)

在上述代码中,CreateUserUpdateUser是用于创建和更新多对多关系的两个解析器。mutate方法中,我们首先创建或获取用户对象,然后使用set方法来设置多对多关系。最后,保存用户对象并返回更新后的用户。

  1. 在GraphQL中使用创建或更新多对多关系的解析器。你可以使用GraphQL的mutation来调用解析器,并传递相应的参数。

创建用户并设置多对多关系的示例mutation:

代码语言:txt
复制
mutation {
  createUser(name: "John", groupIds: [1, 2, 3]) {
    user {
      id
      name
      groups {
        id
        name
      }
    }
  }
}

更新用户的多对多关系的示例mutation:

代码语言:txt
复制
mutation {
  updateUser(userId: 1, groupIds: [2, 3, 4]) {
    user {
      id
      name
      groups {
        id
        name
      }
    }
  }
}

以上就是在Django Graphene中创建或更新多对多关系的完整步骤。在实际应用中,你可以根据具体需求进行相应的调整和扩展。对于更多关于Django Graphene的信息,你可以参考腾讯云的Django Graphene相关产品:Django Graphene

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

DRFManytoMany字段的更新和添加

as timezonefrom django.contrib.auth.models import Userfrom django.db import modelsfrom serverorders.models...('orderMenu') for i in orderMenu: # 我的思路是既然不能在更新主表的时候更新对多字段那就单独把对多字段提出来更新 # 传入对对多字段的时候同步传入需要更新的中间表...# 创建的时候先创建一个centerodrer然后获取centerorder的pk 再创建对应的OrderCenterThough收到更新中间表数据 serializer = self.get_serializer...写的时候又发现了代码的几个bug1、可以更新不是订单人的菜品2、更新的时候只能更新已经生成的菜品内容,因为无法为订单添加新的菜品,这个涉及到中间表的对应关系已经确定了。...其他的bug肯定还有,但是目前已经实现了可以更新已有订单和创建订单的时候添加菜品信息。

68420

Django 对多字段的更新和插入数据实例

return redirect('/index/') 补充知识:Django的ManyToManyField()的使用以及through的作用 创建一个经典的对多关系:一本书可以有多个作者,一个作者可以有本书...从图可以看出生成了三张表,一个是book(书籍)表包含id,title两个字段,一个是author(作者表)包含id,name,email三个字段,这是我们刚刚在models.py文件创建两个模型,但是有一点需要注意的是...从对多字段删除值(删除对多关系): ?...,Django允许指定一个用于管理对多关系的中间模型,然后就可以把这些额外的字段添加到这个中间模型,具体的方法就是ManyToMany字段中指定through参数指定作为中介的中间模型,修改上述models.py...,add(),remove(),create()这些方法都会被禁用,所以创建这种类型的关系的时候唯一的方法就是通过创建中间模型的实例 以上这篇Django 对多字段的更新和插入数据实例就是小编分享给大家的全部内容了

4.2K30

NeurlPS21 | 智能体强化学习论文整理(更新

数据来源于深度强化学习实验室 ,这里针对智能体强化学习做了二次整理。我会先记录一下,随后慢慢更新。 NIPS 2021 智能体强化学习概况 提交 9122 篇,接收 2344 篇,大约 26%。...,但是智能体下的研究很少。... QMIX 其实是会遇到很严重的高估问题,但在现有的研究并未曾减轻其效果。我们使用了一种新的基于正则化的更新模式来减轻该问题,该方法将会惩罚偏离 baseline 的过大联合值函数。...当智能体广播这些表征时,他们可以学习并理解彼此的通信,并在各种智能体通信环境实现强大的能力。 ---- 11....该系统下,每个智能体追逐自身目标, 并且会不断改变和周围智能体的合作或者竞争的关系。人为设计这种 SDP 本身是不现实的。因此这种SDP 的现实模拟问题依然是具有挑战性的。

1.2K20

Django-对多关系的三种创建方式-forms组件使用-cookie与session-08

目录 表模型类对多关系的三种创建方式 django forms 组件 登录功能手写推理过程 整段代码可以放过来 forms 组件使用 forms 后端定义规则并校验结果 forms 前端渲染标签组件...cookie 操作 小练习 如何操作 session 设置 session 获取 session 删除 session 设置 session 超时时间 表模型类对多关系的三种创建方式 关系表可能还会有一个关系创建时间字段...(这条关联记录什么时候添加的) 全自动:利用 ManyToManyField 让 django 自动创建第三张表 优点:不需要手动创建第三张表 不足:由于第三张表不是你手动创建的,也就意味着第三张表字段是固定的...:自己创建第三张表,利用 ManyToManyField 某张表指定关联关系 优点:可以自定义字段,依旧支持基于双下划线、对象的反向查询,可扩展性高 对多字段的方法不支持了(add,set,remove...orm 书籍表和作者表的对多关系是通过 Book2Author 来记录的 # through fields 告诉 django orm 记录关系时用过 Book2Author 表的 book 字段

2.8K20

用 GraphQL 查询你的 Django 应用

GraphQL 首先是一种查询语言,它定义了一种通用的数据查询方式,可以理解为一种通用的 SQL,只不过前者面向抽象的数据集,后者往往是具体的关系型数据库。... REST 基础,我们增加了 fields 参数,并在 DRF Serializer 里做了特殊处理(你可以点击查看源码),实现的具体效果: # 查询 comment,并限制结果返回字段 /api/... REST ,为了这个需求我们可能会额外为 /users 增加一个参数 with_comments # 查询 users,并限制结果返回字段 /api/users?...引入 graphene-django-extras from graphene import ObjectType from graphene_django_extras import DjangoListObjectField...comments = DjangoListObjectField(CommentListType, description="Query all comments") 支持复杂过滤查询 可以列表对象增加

2K60

Patterns | 自监督图预训练模型整合大规模分子网络以探寻疾病相关基因的内在互作机制

图2 Graphene采用来自基因型组织表达 (GTEx) 项目的表达数据和Jensen-Shannon divergence 测量每个人体组织每个基因的特异性。...例如Glutamatergic Synapse 和Calcium Signaling通路模块精神分裂症的作用被凸显出来。...图4 图5 三、总结 疾病相关任务缺乏金标准的情况下,Graphene可以作为一种现成的工具来改进任何更新的疾病GWAS 信号发现并重排序后选基因以获取新的致病机制。...疾病同时训练的机制让Graphene发现疾病之间的区别和联系上有着天然的优势,例如一些难以区分的精神类疾病。...基于Graphene基因优先度重排序上的鲁棒性,其应用还可以扩展到开发目标基因组以用于诊断遗传病对复杂性状的风险评估。

38720

GraphQLPython的简单应用

高效数据获取:客户端可以指定确切需要的数据,避免了过多不足的数据传输。灵活性:GraphQL API可以随着时间的推移演化,旧的字段可以被弃用,而不会影响客户端的操作。...安装必要的库Python,我们将使用graphene创建GraphQL服务器,使用requests库来发送HTTP请求。首先,我们需要安装这些库。...pip install graphene requests3. 设置GraphQL服务器首先,我们需要创建一个简单的GraphQL服务器。...我们介绍了GraphQL的基本概念,如何使用graphene创建一个GraphQL服务器,如何编写GraphQL查询,并使用requests库Python中发送和解析GraphQL请求。...当然,GraphQL还有很多高级特性和用法,比如Mutations、Subscriptions、Fragments等,你可以实际项目中逐步探索和应用。后面我们将会在Django结合使用。

3300

Django分组聚合查询实例分享

OneToOneField(): 一对一字段 同外键 3, ManyToManyField() :对多关系 to = 关联模型类 through=关联关系类 through_fields关联关系...(本身字段,关联字段) 断开外键关联的ForeignKey使用(一对,一对一) # 一对查询 —-(publish and book) # 方式一 : 不使用外键,book 添加 publish_id...# 断开关联(db_constraint属性)的自动创建关系表 (book(外键) and author) # 断开后依然支持Django ORMlianiao 查询语法 # 当新表无需新加额外字段时...** # 1、和自动建立关系表类似,依然支持Django ORM连表查询语法(对多借助关系表连表查询) class Book(models.Model): name = models.CharField...Django分组聚合查询实例分享的文章就介绍到这了,更多相关Django分组聚合查询内容请搜索ZaLou.Cn以前的文章继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

1.8K10

Django ORM 知识概要

相关命令 python3 manage.py makemigrations 根据模型生成相关迁移文件 python3 manage.py migrate 根据迁移文件,将表结构更新到数据库,并在...Django带的migrations数据表更改数据库记录 字段 常用的字段 自增长字段 models.AutoField() models.BigAutoField() 二进制数据 models.BinaryField...删除Django的migrations表对应的记录 删除数据库表 导入数据 Django shell 导入数据 引入模型 调用模型对象的save方法 自己定义一个脚本批量导入数据 fixtures...,prefetch_related() 一对查询优化。...create(),bulk_create(),create_or_update() 创建,批量创建创建更新 更新对象 update(),update_or_create() 更新更新创建 删除对象

1.8K20

Django项目知识点(三)

这个设置让你在使用model的Manager上的lastest方法时,默认使用指定字段来排序 managed 默认值为True,这意味着Django可以使用syncdb和reset命令来创建移除对应的数据库...注意:Django一个模型只允许有一个自增字段,并且该字段必须为主键!...---无论添加修改,都是当前操作的时间 auto_now_add 自动创建---永远是创建时的时间 choices 一个二维的元组被用作choices,如果这样定义,Django会select box...一对:当一张表创建一行数据时,有一个单选的下拉框(可以被重复选择) 一个学院信息表有多个学生的信息表 再比如文章和作者之间的关系。一个文章只能由一个作者编写,但是一个作者可以写篇文章。...文章和作者之间的关系就是典型的对一的关系。作者和文章的关系就是一对某表创建一行数据是,有一个可以多选的下拉框 不同的学生有不同课程表 再比如文章和标签的关系

1.8K30

Django数据库操作之save与update的使用

例如数据更新操作,对单条记录,可以使用save或者是update两种方式 Django工程下的settings.py下将log设置为DEBUG,即可查看save和update分别执行了哪些SQL语句...从使用情境上看,update更加适用于批量数据更新,而save则更适合当然也只适合做单条记录的数据更新操作了。 使用Django的数据模型操作数据库时,了解这些底层的SQL操作很有必要。...所以我们先通过 article = form.save(commit=False)创建article实例,此时让Django先不要发送数据到数据库,等待我们把author添加好后,再把数据一起存储到数据库...如果你直接使用save()form_valid()方法,是可以直接存储(m2m)关系的,不需要用save_m2m。...你使用了save(commit=False)方法 你的model里有关系(比如tags) 假设我们文章模型里有tags这个的字段,我们的article_create方法需要增加一行。

2.8K10

探索 PythonDjango 支持分布式租户数据库,如 Postgres+Citus

Citus 中分发数据 将 Django 应用程序更新为范围查询 使用中间件自动化 更多 确定分布策略 ,我们讨论了租户用例中使用 Citus 所需的与框架无关的数据库更改。...我们还希望能够 account_id 上分发与帐户相关的对多关系。...在所有主键和唯一约束包含 account_id 2.1 将 account_id 包含到主键 Django 会自动模型上创建一个简单的 “id” 主键,因此我们需要通过自己的自定义迁移来规避这种行为...本文的第二部分,我们介绍了 citus , ManyToMany 关系需要一个带有租户列的 through 模型。...使用中间件自动化 而不是每个视图中调用 set_current_tenant(), 您可以 Django 应用程序创建并安装一个新的 middleware 类来自动完成。

2K10

基于Django signals 信号作用及用法详解

我们可以通过使用many-to-many字段的through属性来访问它 instance:被更新对多关系的实例。它可以是上面的sender,也可以是ManyToManyField的关系类。...action:指明作用于关系更新类型的字符串,它可以是以下几种情况: “pre_add”/”post_add”:关系发送一个多个对象前 / 后发送 “pre_remove/post_remove”...:从关系删除一个多个对象前 / 后发送 “pre_clear/post_clear”:关系解除之前 / 之后发送 reverse:正在修改的是正向关系或者反向关系,正向False,反向为True...model:被添加、删除清除的对象的类 pk_set:对于add/remove等,pk_set是一个从关系添加删除的对象的主键 的集合, 对于clear,pk_set为None 举例说明: 两个实例...p.toppings.add(t) 这样,对应的上面的参数分别如下: sender:描述ManyToManyField的中间类,即Pizza.toppings.through instance:被更新对多关系的实例

2K20

【Python全栈100天学习笔记】Day41 Django深入理解框架

MySQL创建数据库的SQL语句如下所示: create database oa default charset utf8; Django框架本身有自带的数据模型,我们稍后会用到这些模型,为此我们先做一次迁移操作...,所以也能通过部门反向查询该部门的员工(从一对多关系“一”的一方查询“”的一方),反向查询属性默认的名字是类名小写_set(如上面例子的emp_set),当然也可以创建模型时通过ForeingKey...说明3:可以QuerySet上使用update()方法一次更新多个对象。...ManyToManyField属性 symmetrical:是否建立对称的对多关系。 through:指定维持对多关系的中间表的Django模型。...throughfields:定义了中间模型时可以指定建立对多关系的字段。 db_table:指定维持对多关系的中间表的表名。

2.2K30

Django基础篇-模型表关系

一对多表关系 Mysql 中一对多是通过外键实现的, django 模型通过 ForeignKeyField 类型实现。...框架篇-Django博客应用-更新首页 一对一表关系 Mysql 中一对一是通过外键加唯一键实现的, django 模型通过 OneToOneField 类型实现。...对多表关系 Mysql 对多是通过中间表外键加联合唯一键实现的, django 模型通过 ManyToManyField 类型实现。中间表模型会自动创建。...例子: 学院---学生---课程---学生成绩 学院与学生一对一关系,学生与课程对多关系 课程 学生成绩 关系数据的操作 : 同级目录下的 views.py from django.http import...s1 = Student(s_name='yuntuan') # 将学生 s1 添加到 学院 d1 s1.department = d1 s1.save() # 对多关系添加内容

84630

django 1.8 官方文档翻译: 2-2-1 执行查询

上述原则同样适用于 exclude():一个单独 exclude() 的所有筛选条件都是作用于同一个实例 (如果这些条件都是针对同一个一对关系)。...,filter 和 exclude子句中,你不能在 F() 对象引入关联关系(NO-Join),你只能引用当前 model 更新的字段。...对多关系 对多关系的任何一方都可以使用 API 访问相关联的另一方。的 API 用起来和上面提到的 “逆向” 一对多关系关系非常相象。...一对一关系 相对于对一关系而言,一对一关系不是非常简单的。如果你 model 定义了一个 OneToOneField 关系,那么你就可以用这个字段的名称做为属性来访问其所关联的对象。...任何一个 model 第一次调用时,Django 就会遍历所有的 INSTALLED_APPS 的所有 models,并且在内存创建中必要的反向连接。

4.3K20
领券