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

在django rest框架中,通过一个序列化程序保存两个相关的模型,并将第一个id作为外键传递给第二个?

在Django Rest框架中,可以通过使用序列化程序来保存两个相关的模型,并将第一个模型的id作为外键传递给第二个模型。

首先,需要定义两个相关的模型,例如ModelA和ModelB。然后,创建两个对应的序列化程序,例如SerializerA和SerializerB。

在SerializerA中,可以定义一个外键字段,将其设置为SerializerB的主键字段。这样,当序列化程序保存ModelA时,可以将ModelB的id作为外键传递给SerializerB。

以下是一个示例代码:

代码语言:txt
复制
# models.py
from django.db import models

class ModelA(models.Model):
    # 定义ModelA的字段

class ModelB(models.Model):
    model_a = models.ForeignKey(ModelA, on_delete=models.CASCADE)
    # 定义ModelB的字段

# serializers.py
from rest_framework import serializers

class SerializerA(serializers.ModelSerializer):
    model_b = SerializerB()

    class Meta:
        model = ModelA
        fields = '__all__'

class SerializerB(serializers.ModelSerializer):
    class Meta:
        model = ModelB
        fields = '__all__'

# views.py
from rest_framework import viewsets

class ModelAViewSet(viewsets.ModelViewSet):
    queryset = ModelA.objects.all()
    serializer_class = SerializerA

class ModelBViewSet(viewsets.ModelViewSet):
    queryset = ModelB.objects.all()
    serializer_class = SerializerB

在上述示例中,ModelA和ModelB是两个相关的模型,ModelB包含一个外键字段model_a,将其设置为ModelA的主键字段。SerializerA和SerializerB分别对应ModelA和ModelB的序列化程序。

在SerializerA中,通过定义model_b字段,并将其设置为SerializerB的实例,实现了将ModelB的id作为外键传递给SerializerB。

最后,在视图中使用ModelAViewSet和ModelBViewSet来处理相关模型的创建、更新、删除等操作。

这样,通过使用序列化程序,可以在Django Rest框架中保存两个相关的模型,并将第一个模型的id作为外键传递给第二个模型。

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

相关·内容

Django&DRF重点内容大盘点

大家可以了解了Django框架和DRF框架之后再来看这篇文章。否则会有点不知所云。...1.3一个程序注意点 1.3.1视图函数定义 1)定义视图函数之后,要有一个request形参接收请求对象。..., verbose_name='图书') # cascade是级联,删除主表数据时连同数据一起删除 1.12.3迁移生成表 1)生成迁移文件 python manage.py makemigrations...使用 1)配置文件设置配置项MEDIA_ROOT='上传文件保存目录' 2)定义模型类时,图片字段类型使用 ImageField 3)迁移生成表并在admin.py注册模型类,直接登录Admin...1.将数据库数据序列化为前端所需要格式,并返回 2.将前端发送数据反序列化模型类对象,并保存到数据库 2.4DRF框架 2.4.1作用:大大提高RestAPI接口开发效率 2.5序列化器Serializer

5.9K20

Django 3.1 官网学习路线

字段还可以有各种可选参数;本例,我们将投票默认值设置为 0。 最后,请注意使用定义了关系。这告诉 Django 每个选择都与一个问题相关。...按照惯例,Django 会将"_id"附加到外字段名。(是的,你也可以重写这个。) 关系是通过约束来显式。...render()函数将请求对象作为第一个参数,将模板名称作为第二个参数,将字典作为可选第三个参数。它返回使用给定上下文呈现给定模板 HttpResponse 对象。...,然后将它作为第二个参数传递给 admin.site.register()——任何时候您需要更改模型管理选项。...“添加选择”表单如下所示: 该表单,“Question”字段是一个选择框,包含数据库每个问题。Django 知道一个应该在管理中表示为一个框。我们例子,目前只存在一个问题。

8.1K10

DRF框架学习(二)

把其他格式数据转换为程序数据结构类型,这个过程叫做反序列化过程。 例:将前端传递数据保存模型对象过程,叫做反序列化过程。...3.DRF框架 作用:大大提高RestAPI接口开发效率 简介: Django REST framework 框架一个用于构建Web API 强大而又灵活工具。...通常简称为DRF框架REST framework。 DRF框架是建立Django框架基础之上,由Tom Christie大牛二次开发开源项目。...Django框架学习创建demo工程,settings.pyINSTALLED_APPS添加’rest_framework’。...django路由列表 4.Serializer序列化器 作用:进行数据序列化和反序列化 序列化:把对象转换为字典 反序列化:数据校验;数据保存(可以利用这一点实现新增和更新); 4.1使用 定义一个序列化器类

4.1K30

Django数据库查询优化与AJAX

,特点:按步骤查询多张表,然后将查询结果封装到对象,给用户感觉好像还是连表操作,括号内支持多个字段,每放一个字段就会多走一条SQL语句,多查一张表。...:模型层、模板层、视图层 Django自称是MTV框架,其实本质还是MCV MCV(models views controllar) models views controllar:模型层、视图层、控制层...先添加普通键值 MyFormData.append('username','ylpb'); // 添加了一组普通简直对,append后面第一个参数是第二个参数是值...Django内置serializers模块 前端想拿到通过orm查到一个个对象,(数据库里一条条记录),后端想把直接实例化出来对象发送给前端,这时候就需要用到Django给我们提供序列法方式(...from django.core import serializers #调用该模块下方法,第一个参数是你想以什么样方式序列化数据 ret=serializers.serialize

2.3K20

重点内容回顾-DRF

重点内容回顾-DRF 1. on_delete on_delete是定义模型类中外一个选项。 on_delete选项指明是主表删除数据时候,对于引用表数据如何处理。...b.PROTECT保护,通过抛出一个异常ProtectedError异常,来阻止删除主表中被引用数据。...2. related_name related_name是定义模型类时,一个选项。它功能下面慢慢给大家分析一下。...5.3序列化&反序列化 下面从我们最近推文项目来简单理解两个概念。 序列化:将模型对象转换为字典或者json数据过程。 反序列化:将前端传递数据保存模型对象过程。...团队开发注意事项 浅谈密码加密 Django框架英文单词 Django数据库相关操作 DRF框架英文单词

2.4K20

Django REST 框架详解 04 | 序列化与反序列化及二者整合

文章目录 一、序列化 1.步骤 2.模拟场景 3.模型构建 4.序列化 5.视图 6.路由 7.测试接口 二、反序列化与验证 1.反序列化 2.视图 3.测试接口 三、序列化与反序列整合...1.视图 2.路由 3.接口测试 一、序列化 1.步骤 model s.py,定义表与字段,及表关系 serializes.py 序列化与反序列化 views.py 写 get,post 等操作...# 注意:调用时有加载顺序,PublishModelSerializer >> PublishModelSerializer # 这里通过 book publish ,提数据...def validate(self, attrs): # 同一出版社不能出版同一本书 publish = attrs.get('publish') # 这里已经变成对象...三、序列化与反序列整合 从数据安全性和健壮性来考虑,所有的自定义字段不能与 model 原字段相同 因为序列化是将字段作为 Dict,而反序列化会将字段作为 Object 1.视图 views.py

94910

TO-do api

Models 接下来是todos应用程序定义我们Todo数据库模型。 我们将保持基本状态,只有两个字段:title和body。...如果我们两个不同应用程序更新了模型,然后运行python manage.py makemigrations,则生成单个迁移文件将包含两个应用程序数据。 这只会增加调试难度。...api/有所有待办事项列表位于空字符串 '',即。 每个待办事项都将在其主键上可用,这是Django每个数据库表自动设置值。 第一个条目是1,第二个条目是2,依此类推。...然后,我们安装了Django REST Framework并配置了URL。 现在,我们需要将模型数据转换为将在URL输出JSON。 因此,我们需要一个序列化器。...Views 传统Django,视图用于自定义要发送到模板数据。 Django REST Framework,视图执行相同操作,但对序列化数据而言。

3.6K31

如何使用Django构建现代Web应用程序来管理客户信息并在Ubuntu 18.04上进行反应

Django一个免费开源Python Web框架,遵循模型视图控制器(MVC)软件架构模式。 Django REST框架一个功能强大且灵活工具包,用于Django构建REST API。...我们应用程序将为Django和React使用两个不同开发服务器。它们将在不同端口上运行,并将作为两个独立域运行。...Django每个模型都是一个扩展django.db.models.ModelPython类。 该Customer模型将具有以下数据库字段: first_name - 客户第一个名字。...API消耗方面,DjangoREST框架一个串行器允许将复杂模型实例和查询集转换成JSON格式。...序列化程序类也可以一个方向上工作,提供将数据解析和反序列化Django模型和QuerySets机制。

13.9K83

Django序列化简单使用

序列化,完成数据校验功能 为方便理解后面序列化字段,我们先在创建APPmodels.py 建立一个数据库模型类。...写需要序列化字段,即需要序列化哪些字段就在类写哪个字段。为使代码清晰、方便管理,我们可以新建一个ser.py 文件来存储序列化代码。...data参数 除了instance和data参数构造Serializer对象时,还可通过context参数额外添加数据,如除了instance和data参数构造Serializer对象时,还可通过...=1作为关键字参数传递给它。...5、模型序列化器 如果我们想要使用序列化器对应Django模型类,DRF为我们提供了ModelSerializer模型序列化器来帮助我们快速创建一个Serializer类。

1.5K40

DjangoRESTframework(补充)

,将模型对象传入 2) data:用于反序列化,将被反序列化数据传入 3) 除了instance和data参数构造Serializer对象时,还可通过context参数额外添加数据 serializer...定义多方序列化器 时,一方字段如何序列化 先定义多方序列化器除外字段以外其他部分 class HeroInfoSerializer(serializers.Serializer):...验证失败,可以通过序列化器对象 errors 属性获取错误信息,返回一个字典, 包含字段和字段错误,若是非字段错误,可以通过修改 REST framework 配置 NON_FIElD_ERRORS_KEY...,并将要反序列化数据传递给data构造参数,进而进行验证 from booktest.serializers import BookInfoSerializer data = {'bpub_date'...两个基类 1) APIView rest_framework.views.APIView APIView是REST framework提供所有视图基类,继承自DjangoView父类

2.2K30

Django_rest框架电商项目实践项目(一篇文章讲清楚电商项目)项目的创建与基本配置,所有接口代码,项目代码已给

目录 需求 创建一个Django项目 配置基础东西 连接mysql 使用Django_rest 解决跨域 建模(model里面写实体类) admin.py文件里面的创建 手动在后台管理系统里面添加相关数据...,需要排序 根据生产厂商进行选择 view url 前段参 商品详情 view url 前端如何参 查询需要返回具体name值,而不是id 第一种方法 第二种方法 实现用户登录 用户详情...pk 前端如何参 查询需要返回具体name值,而不是id 第一种方法 class ProductRetrieveSerializer(serializers.ModelSerializer...['password'])#通过字典方式调用,进行密码加密 user.save()#保存到内存 user_profile=UserProfile(user=user)...这个表有一个和用户关联。

2.6K10

teprunner测试平台开发用例管理不只有增删改查

第一个序列化器是CaseSerializer: 只关联了Case模型字段。...(),instance是指Meta.model定义模型,这里就等同于Case,通过instance.id获取到Case.id并赋值给case_id变量,从CaseResult对象过滤case_id...新建teprunner/views/case.py文件,添加视图,先把简单两个视图做了,第一个视图是case_result: 这里是个知识点,采用@api_view注解函数视图,如果想用序列化器,...第二个视图是copy_case: 根据case_id查找到现有Case对象,case.desc后面添加--复制后缀,其他字段数据复用,保存,就完成复制用例了。...新增用例时候,没有用例ID,就不能直接运行用例,为了解决这个问题,把保存后接口响应ID作为运行用例ID

1.2K10

第 3 篇:实现博客首页文章列表 API

视图函数里我们先从数据库获取文章列表资源,然后使用序列化器对其进行序列化序列化数据存在 data 属性里,我们把它传递给 HTTP 响应类 Response,并将这个响应返回。...转换过程,还会进行数据合法性校验。 先来看一个简单例子(摘自 django-rest-framework 官网示例),理解序列化工作原理和功能。...原因在于,对于 django 模型(Model),已经有了定义其数据类型模型字段,因此 django 表单可以根据关联模型,自动推测需要使用表单字段,背后帮我们完成表单字段选择,简化了表单定义...和表单类似,django-rest-framework 序列化器也可以根据关联模型,自动检测被序列化模型各个属性数据类型,推测需要使用序列化字段,无需我们显示定义。...按照习惯,序列化代码位于相应应用 serializers.py 模块,因此 blog 应用下新建一个 serializers.py 文件,写上如下代码: from rest_framework

98620

测试开发你不得不学 REST API 开发

显然API开发已经成为后端程序必备技能了,那作为一个测试,特别是把Django作为自己主要自动化测试平台测试开发,Django REST framework(DRF)这个REST API开发框架就是你不得不掌握内容了.../EhGWefofhWtAjdd8sSMC-A 开始动手使用Django REST framework 编写你自动化测试平台之前,请大家先阅读以上两篇文章了解RESTful架构以及Django基本开发流程...环境准备 构建一个虚拟环境,并安装好相关依赖: 创建一个Django项目及APP: 编辑配置文件setting.py: 创建一个Django项目及APP: 更新数据库: 模型序列化 准备好环境之后...首先是模型层,apiTest/model.py 创建一个Project 类来存储项目信息: Django REST framework框架Django框架最核心区别就是:序列化器,DRF提供了定义序列化器...apiTest/project.py添加以下代码: 显示-URLs 为了客户端能够访问开发完成接口(即url与视图映射),apiTest/urls添加如下代码: 如此就可以通过 http

1K10

测试开发进阶(二十七)

PrimaryKeyRelatedField interfaces/serializer.py创建序列化器 from rest_framework import serializers from...project = PrimaryKeyRelatedField(help_text='所属项目', label='所属项目', queryset=Projects.objects.all()) 数据库模型字段默认会生产...PrimaryKeyRelatedField序列化器字段 序列化输出值为ID序列化输出 from interfaces.models import Interfaces one_interface...优化视图-请求 from rest_framework.views import APIView 当视图继承 APIView之后,请求实例方法第二个参数 request为 Request对象,是对Django...GenericAPIView from rest_framework.generics import GenericAPIView 视图类中指定过滤引擎 指定需要排序字段 指定查询集 指定模型序列化

58120

跟着官方文档学Python——Django Rest framework

两者都是数据转换格式,比如我们django获取到数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,所以需要把数据进行序列化,变成字符串或者json数据,提供给别人,这是序列化。...再比如前端js提供过来json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样才能把数据保存到数据库,这是反序列化。...Django Rest framework Django REST framework是一个内置django里面的子应用,可以快速开发REST API接口应用。...'rest_framework', ] 项目中如果使用rest_framework框架实现API接口,主要有以下三个步骤: 将请求数据(如JSON格式)转换为模型类对象 通过模型类对象进行数据库操作...Api List可以查看所有学生信息,也可以进行增删查改(POST/DELETE/GET/PUT) 也可以通过携带用户idurl访问单个用户 http://127.0.0.1:8000/students

2.3K10

day91-day92-DjangoRestFrameWork序列化&反序列化使用

2.2.5 主外关系:主表字段名 = 类(),多对多关系时注意指定many=True参数 2.2.6 -- required=False 只序列化不走校验 -- read_only...序列化字段里面注意指定 validators=[my_validate, ],将校验函数添加进参数列表 -- 对单个序列化字段校验函数,权重第二,第二个校验,validate_字段名..." "对该出版社和作者只行进get只读序列化" publisher = PublisherSerializer(read_only=True) ",书籍和作者之间多对多"...(),对反序列化字段 进行联合校验,同样单个字段校验权重最高,联合校验权重最低 3.7 批量更新时候 class Meta 定义list_serializer_class class... queryset 时候,注意指定 many=True 参数 4.8 注意 save 4.9 成功返回 ser_obj.data from rest_framework.views import

97450
领券