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

在对象创建时保存多对多字段- Django DRF

在Django DRF中,当需要在对象创建时保存多对多字段时,可以通过以下几个步骤来实现:

  1. 首先,在定义模型类时,使用Django提供的models.ManyToManyField字段来表示多对多关系。例如,我们有两个模型类A和B,它们之间存在多对多关系,可以这样定义:
代码语言:txt
复制
from django.db import models

class A(models.Model):
    # 定义A模型的其他字段
    
class B(models.Model):
    a = models.ManyToManyField(A)
    # 定义B模型的其他字段
  1. 在创建对象时,可以使用DRF的序列化器来处理多对多字段。首先,创建一个用于保存B对象的序列化器BSerializer,并在其中指定多对多字段的处理方式为write_only,表示只用于写入操作。同时,可以通过重写create方法,在创建B对象时保存多对多字段的数据。
代码语言:txt
复制
from rest_framework import serializers

class BSerializer(serializers.ModelSerializer):
    a = serializers.PrimaryKeyRelatedField(queryset=A.objects.all(), many=True, write_only=True)

    class Meta:
        model = B
        fields = '__all__'

    def create(self, validated_data):
        a_data = validated_data.pop('a')
        b = B.objects.create(**validated_data)
        b.a.set(a_data)
        return b
  1. 在视图中使用该序列化器处理请求。例如,创建一个用于处理POST请求的视图,可以这样定义:
代码语言:txt
复制
from rest_framework import generics

class BCreateView(generics.CreateAPIView):
    serializer_class = BSerializer

这样,当调用该视图的POST方法创建B对象时,会将请求中的多对多字段保存到数据库中。

关于Django DRF中多对多字段保存的更多信息,可以参考以下资源:

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

相关·内容

DRFManytoMany字段的更新和添加

背景:drf的序列化器给模型输出带来了便利但是对于字段网上查询的内容却是很少(也有可能是本人不会搜答案)经过我多个日夜的摸索,终于实现了我的需求,现将自己的心得记录一下说下我的需求:定义一个订单模型里面的订单...orderId 是自动生成的UUID订单的区域是外键,下单人也是外键,菜品orderMenu是一个字段(其实通过我查到的方法说的都是外键字段就可以实现但是个人觉得菜品和订单应该是多会比较好理解...('orderMenu') for i in orderMenu: # 我的思路是既然不能在更新主表的时候更新字段那就单独把字段提出来更新 # 传入字段的时候同步传入需要更新的中间表...# 创建的时候先创建一个centerodrer然后获取centerorder的pk 再创建对应的OrderCenterThough收到更新中间表数据 serializer = self.get_serializer...主要是一个思路,drf 的ModelSerializer 和 ModelViewSet 封装的太严实了,通过这样的方法来更新和添加多字段实属自己技术不成熟。

91820

Django Xadmin字段过滤实例

xadmin中是不能像原生admin那样使用formfield_for_manytomany方法来过滤字段 ?...补充知识:给django admin后台管理user扩展下拉框及多选框的字段 1.首先在models.py中编写扩展User所用到的userProfile模型及下拉框和多选框选项值所需要的模型(因为我所做的下拉框和多选框的值都是从数据库里面取得...),代码如下: 2.第二步编写admin.pyUser字段进行扩展,代码如下: # -*- coding: UTF-8 -*- from django.contrib import admin from...django import forms from TESTAPP.models import test,userProfile from django.contrib.auth.admin import...以上这篇Django Xadmin字段过滤实例就是小编分享给大家的全部内容了,希望能给大家一个参考。

1.9K20
  • Django 字段的更新和插入数据实例

    从图可以看出生成了三张表,一个是book(书籍)表包含id,title两个字段,一个是author(作者表)包含id,name,email三个字段,这是我们刚刚在models.py文件中创建两个模型,但是有一点需要注意的是...,Django允许指定一个用于管理多关系的中间模型,然后就可以把这些额外的字段添加到这个中间模型中,具体的方法就是ManyToMany字段中指定through参数指定作为中介的中间模型,修改上述models.py...创建BookAuthor类的最后使用了自定义的名称,这个也可以不用指定,系统可以自动生成表名 仔细观察BookAuthor这个类,也就是我们前面讲到的中间模型,同时我们看到创建中间模型的时候我们创建了两个外键...,这两个外键定义了两个模型之间是如何关联到一起的 所以当创建多关系模型的时候提倡使用through参数去指定并创建中间模型,这样比较方便我们进行字段的扩展 那么此时我们又该如何添加和删除多关系呢...,add(),remove(),create()这些方法都会被禁用,所以创建这种类型的关系的时候唯一的方法就是通过创建中间模型的实例 以上这篇Django 字段的更新和插入数据实例就是小编分享给大家的全部内容了

    4.3K30

    重点内容回顾-DRF

    仅仅在该字段null=True,允许为null可用。 2. related_name related_name是定义模型类,外键的一个选项。它的功能下面慢慢给大家分析一下。...由一查:一对象.类名小写__set.all() sub_areas = area.area_set.all() 一旦设置了 related_name='subs'的时候,我们查询area的下级地区的时候...,validators=[about_django]) b.序列化器中定义一个方法 validate_,来 字段进行验证。...return attrs 2.数据保存(新增&更新) 创建序列化对象的时候如果只是传入了data参数,那么就会调用create方法进行数据保存;如果还传入了instance对象,那么就会调用update...功能: 1.视图中request对象不再是Django中原始的HttpRequest类的对象,而是DRF框架封装的Request类的对象

    2.4K20

    DRF框架学习(二)

    通常简称为DRF框架 或 REST framework。 DRF框架是建立Django框架基础之上,由Tom Christie大牛二次开发的开源项目。...3.2见识DRF的魅力 我们仍以在学习Django框架使用的图书英雄为案例,使用Django REST framework快速实现图书的REST API。 3.2.1....创建序列化器 booktest应用中新建serializers.py用于保存该应用的序列化器。 创建一个BookInfoSerializer用于序列化与反序列化。...4.5序列化功能(重点掌握) 把实例对象转换为字典数据 知识点: 1、序列化单个对象 2、序列化多个对象 3、关联对象的嵌套序列化 1)将关联对象序列化为关联对象的主键 # 英雄类()中添加 hbook...序列器类中重写update方法: def update(self,instance,validated_data): """ instance:创建序列化器对象传入实例对象 validated_data

    4.1K30

    DjangoRestFramework,序列化组件、视图组件

    给我们提供的一个类似于Postman功能的页面,首先我们创建一个django项目,创建一个Course表,然后添加一些数据,然后按照下面的步骤操作, 第一步:引入drf的Response对象  from...(max_length=32, source='publish.name') # source指定返回的一的那个publish对象的其他字段数据,可以接着写字段,也就是说关联的所有的字段的数据都可以写在这里进行序列化...,专门给字段用的,然后下面定义一个方法,方法名称写法是这样的get_字段名,名字必须是这样 def get_authors(self,obj): #参数写一个obj,这个obj是一个一个的书籍对象...中的create()和update()方法用于创建生成一个Model实例,使用Serializer,如果要保存反序列化后的实例到数据库,则必须要实现这两方法之一,生成的实例则作为save()返回值返回...等基础校验之外,还会会根据咱们写的这个序列化组件中设置的字段中有read_only=True属性的字段排除掉,这也是为什么我们面写和一字段,如果字段名称和model表中或者一字段名称相同

    2.6K20

    django-rest-framewor

    DRF(Django RestFramework)是一套基于Django开发的、帮助我们更好的设计符合REST规范的Web应用的一个Django App,所以,本质上,它是一个Django App。...DRF APIView请求流程: ?   DRFdjango视图配置流程图(个人画) ?...2 解析器组件 (用来解析数据的请求的组件)   Django并不能处理请求协议为application/json编码协议的数据   注意: DRF解析器会封装到View中的parsers内,视图函数被调用时...post方法:视图类中定义post方法 开始序列化:通过我们上面定义的序列化类,创建一个序列化对象,传入参数data=request.data(application/json)数据 校验数据:通过实例对象的...is_valid()方法,请求数据的合法性进行校验 保存数据:调用save()方法,将数据插入数据库 插入数据到多关系表:如果有字段,手动插入数据到多关系表 返回:将插入的对象返回

    1.6K10

    DRF学习笔记(一)

    # 一、Django REST FrameWork 简介 使用 Django REST FramWork 能够让我们使用 Django 编写的后端 API 接口,更优雅的处理数据的 json 序列化和...# 二、序列化器的使用 # 1、介绍 序列化器是 DRF 当中的灵魂,因为有它的存在,能够帮助我们少写非常的重复性代码,比如,当我们的应用当中有这样一个 Model : from django.db...DRF 提供的序列化器我们的之前编写的 views 代码进行改造了 # 三、Request 对象解析 当我们的视图层继承了 DRF 给我们提供的的 View DRF会给我们编写的视图函数传递一个...request对象,该对象 Django 原生 request对象的封装,同时获取 request对象中的数据进行了简化,使其更加方便的配合序列化器使用。...# 四、Respone 对象解析 DRF Django 原生的 Response 对象进行了封装

    64810

    Django rest Framework入门 三 :序列化与反序列化

    Serializer类 DRF框架中,序列化与反序列化是通过Serializer来实现的,常用的有serializer.ModelSerializer和serializer.Serializer这两个类...1.ModelSerialzer 在前一篇DRF笔记(二):DRF框架初体验 中使用的其实就是ModelSerializer,实际开发中使用的比较多的也是这个类。..., # 一般Django的Model没有默认值的时候都是必须的,否则会报错 title = serializers.CharField(max_length=20, label='书名...,可以直接调用Django Model中create方法创建 """ return BookInfo.objects.create(validated_data)...这里说的“处理”其中有一个环节就是获取到的数据进行校验,校验合格后才能真正存储到数据库中。 1.编写校验函数 DRF框架中有多种方法可以编写校验函数,这里只写一种比较通用的示例。

    16610

    第 11 篇:基于 drf-haystack 的文章搜索接口

    关键的地方在这个 search_fields,这个列表声明用于搜索的字段(通常都定义为索引字段),我们在上一部教程设置 django-haystack ,文章的索引字段设置的名字叫 text,如果这一块有疑惑...但是,django-rest-framework 并没有提供这些比较个性化需求的序列化字段,因此接下来我们接触 drf 的一点高级用法——自定义序列化字段。...对象,这个对象就是视图中的 HTTP 请求对象,但是因为 django 中 request 对象无法像 flask 那样从全局获取,因此 drf 视图中将其保存在了序列化器和序列化字段的 context...text=markdown,所以 query_params 保存了 URL 中的查询参数,将其封装为一个类字段对象 {"text": "markdown"},这里 text 的值就是查询的关键字,我们将它传给...summary 是我们新增的字段,注意我们序列化的对象是文章 Post,但这个对象是没有 summary 这个属性的,但是 summary 其实是属性 body 序列化后的结果,因此我们通过指定序列化化字段

    1.6K20

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

    目录 表模型类多关系的三种创建方式 django forms 组件 登录功能手写推理过程 整段代码可以放过来 forms 组件使用 forms 后端定义规则并校验结果 forms 前端渲染标签组件...cookie 操作 小练习 如何操作 session 设置 session 获取 session 删除 session 设置 session 超时时间 表模型类多关系的三种创建方式 关系表可能还会有一个关系创建时间字段...:自己创建第三张表,利用 ManyToManyField 某张表指定关联关系 优点:可以自定义字段,依旧支持基于双下划线、对象的反向查询,可扩展性高 字段的方法不支持了(add,set,remove...orm 书籍表和作者表的多关系是通过 Book2Author 来记录的 # through fields 告诉 django orm 记录关系用过 Book2Author 表中的 book 字段...django 项目中有参数不好传,可以放在 session 里,就全局变量一样,直接从 session 里拿就能拿到了

    2.8K20

    Django相关知识点回顾

    = 值 可以写多个查询条件,默认是且的关系 F对象: 用于查询字段之间的比较 from django.db.models import F Q对象: 用于查询条件之间的逻辑关系 from django.db.models...()过滤器调用聚合函数 排序: 排序默认是升序,降序排序字段前加- 使用order_by 关联查询: 1.查询和指定对象关联的数据 # 由1查对象.类名小写_set.all() 例:book.heroinfo_set.all...() # 由查1 对象.外键属性 例:hero.hbook 2.通过模型类进行关联查询 # 查图书(一) 一类.objects.get|filter(类名__字段__条件=值) 例:books =...使用 1.配置文件中设置配置项MEDIA_ROOT='上传文件的保存目录' 2.定义模型类,图片字段的类型使用 ImageField 3.迁移生成表并在admin.py注册模型类,直接登录Admin...框架中的英文单词 Django中数据库的相关操作 DRF框架中的英文单词 重点内容回顾-DRF

    10K51

    第 9 篇:实现分类、标签、归档日期接口

    回顾一下我们之前使用视图集 viewset 提到过 action(动作)的概念,django-rest-framework 预定义了几个标准的动作,分别为 list 获取资源列表,retrieve...之前序列化字段都是序列化器(Serializer)里面使用的,因为通常来说接口需要序列化一个对象的多个字段。...用法也很简单,实例化序列化字段,调用其 to_representation 方法,将需要序列化的值传入即可(其实序列化器序列对象的多个字段,内部也是分别调用对应序列化字段的 to_representation...接着我们接口返回一个 Response, Response 将序列化后的结果包装返回(保存在 data 属性中),django-rest-framework 会进一步帮我们把这个 Response 中包含的数据解析为合适的格式...其中 filter_backends 设置为 DjangoFilterBackend,这样 API 返回结果django-rest-framework 会调用设置的 backend(这里是 DjangoFilterBackend

    2.6K30

    python技术面试题(二十三)

    __enter__ 方法会在执行 with 后面的语句执行,一般用来处理操作前的内容。比如一些创建对象,初始化等。...功能: 1.视图中 request 对象不再是 Django 原始的 HTTPRequest 类的对象,而是由 DRF 框架封装成的 Request 类的对象。...比如 request.data 保存解析之后的请求体的数据,并且已经解析成了字典或者类字典,相当于包含 Django 原始 request 对象中的 request.body | request.POST...再比如 request.query_params保存解析之后的查询字符串的数据,并且已经解析成了字典或者类字典,相当于 Django 原始 request 对象中的 request.GET。...下一步就是创建索引类,来指明让搜索引擎哪些字段建立索引,也就是可以通过哪些字段的关键字来检索数据。 REST framework中,索引类的字段会作为查询结果返回数据的来源。

    1.2K10

    【愚公系列】2022年04月 Python教学课程 70-DRF框架之视图集

    _NOT_FOUND) serializer = BookInfoSerializer(books) return Response(serializer.data) 设置路由...books = BookInfo.objects.all() # 2、提取所有对象字段内容 # 初始化生成序列化器对象 ser = BookSerializer...(books, many=True) # 使用序列化器对象的data方法获取序列化后的结果 data = ser.data # 3、返回所有对象字段内容...GenericViewSet就帮助我们完成了这样的继承工作,继承自GenericAPIView与ViewSetMixin,实现了调用as_view()传入字典(如{‘get’:‘list’})的映射处理工作的同时...(books, many=True) # 使用序列化器对象的data方法获取序列化后的结果 data = ser.data # 3、返回所有对象字段内容

    1.6K30
    领券