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

如何在没有read_only=True的django rest框架中Foreign_Key值而不是id

在没有read_only=True的Django REST框架中,可以通过以下步骤来获取Foreign Key值而不是id:

  1. 在序列化器(Serializer)中,将Foreign Key字段声明为只读字段(read-only field),并指定source参数为相关对象的特定字段,而不是默认的id字段。例如,假设有一个模型(Model)Category,其中包含一个外键字段parent,你可以创建一个序列化器如下所示:
代码语言:txt
复制
from rest_framework import serializers
from .models import Category

class CategorySerializer(serializers.ModelSerializer):
    parent = serializers.ReadOnlyField(source='parent.name')

    class Meta:
        model = Category
        fields = ('id', 'name', 'parent')

在上面的例子中,我们将parent字段声明为只读字段,并指定了source参数为parent.name,这样在序列化时会获取parent对象的name字段的值,而不是默认的id值。

  1. 在视图中,使用上述定义的序列化器进行对象的序列化和反序列化操作。例如,假设你有一个视图(View)CategoryViewSet,可以在其中指定序列化器为上述定义的CategorySerializer
代码语言:txt
复制
from rest_framework import viewsets
from .serializers import CategorySerializer
from .models import Category

class CategoryViewSet(viewsets.ModelViewSet):
    queryset = Category.objects.all()
    serializer_class = CategorySerializer

在上面的例子中,我们将视图中的序列化器指定为CategorySerializer,这样在请求处理过程中会使用该序列化器进行对象的序列化和反序列化。

通过以上步骤,你可以在没有read_only=True的情况下获取Foreign Key值而不是id。关于Django REST框架的更多信息,你可以参考腾讯云的Django REST框架产品介绍页面。

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

相关·内容

  • 测试开发进阶(二十五)

    痛点 代码冗余极其严重,不符合优秀测开风格 数据校验非常麻烦,且可复用性差 编码没有统一的规范,杂乱无章的感觉 写的代码非常多,不够简洁 仅支持json格式的传参,不支持form表单传参 仅能返回json...格式的数据,其他类型不支持 列表页视图没有分页,过滤,排序功能 Django REST framework 在Django框架基础上,进行二次开发 用于构建Restful API 简称为DRF框架或REST...中添加 'rest_framework' INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes...修改 projects.serializer.ProjectSerializer中的 id = serializers.IntegerField(label='ID', read_only=True)...增加 read_only=True,指定该字段只能进行序列化输出「只读」,不进行反序列化。

    81330

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

    Field,它不根据用户提交获取值,而是从默认值或可调用的值中获取其值。...一种常见的使用场景就是在Model中存在user_id作为外键,在用户提交时,不允许提交user_id,但user_id在定义Model时又是必须字段,这种情况下就可以使用HiddenField提供一个默认值...等基础校验之外,还会会根据咱们写的这个序列化组件中设置的字段中有read_only=True属性的字段排除掉,这也是为什么我们在面写多对多和一对多字段时,如果字段名称和model表中多对多或者一对多的字段名称相同...,也就是说,如果我们将SerializerMethodField中的read_only改成False,那么在进行字段验证的时候,这个字段就没有被排除,也就是说,必须传给我这个authors_list名字的数据...,即便是这个字段的名字和数据表中字段名字相同,也是没有问题的,只有在用户提交数据保存的时候才会有问题,所以最好的解决方式就是加read_only属性,并且改一下字段名字,不要和数据表中这个字段的名字相同

    2.6K20

    经历了源码的痛苦,掌握DRF的核心序列化器

    DRF的核心当然不是知道视图类执行流程就可以了,DRF框架的核心那就是 序列化器的使用,如何使用序列化器实现 序列化、 反序列化,以及视图,这篇会介绍到~ 序列化器 什么是序列化和反序列化?...demo 在app中新建serializer.py,自定义类,继承DRF框架的Serializer及其子类 在类中写要序列化的字段(序列化哪些就写哪些,不序列化的不写) 使用序列化类,视图类中用,得到序列化类对象...,反序列化验证字段用 在对BookSerializer类实例化传入的参数不知道传什么,由于我们没有写构造函数,去父类看需要什么参数传什么就可以了 使用浏览器测得时候一定要注册rest_framework...或者value,比如price可以自定义成price_down,通过返回值来控制value 在序列化类中写需要搭配get_字段的方法,来自定制字段 方法二:在表模型(models.py)中写 '''models.py...字段是从表模型映射过来的,auto自增的,不传也可以 # 自定制的字段不传必须注册,在列表中 fields = ['id', 'title', 'price', 'price_info

    83910

    drf序列化器之反序列化的数据验证

    如果是非字段错误,可以通过修改REST framework配置中的NON_FIELD_ERRORS_KEY来控制错误字典中的键名。...django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', # 把drf框架注册到django项目中...= serializers.字段类型(验证选项) # read_only=True,设置id为只读字段,当字段设置为read_only为True,则当前字段只会在序列化阶段使用 id...validate, 参数data代表了所有字段的数据值,其实就是视图代码中实例化序列化器对象时的data参数 开发中,类似 密码和确认密码,此时这2个字段,必须进行比较才能通过验证...trim_whitespace 是否截断空白字符 max_value 【数值】最小值 min_value 【数值】最大值 通用参数: 参数名称 说明 read_only 表明该字段仅用于序列化输出,默认

    2.1K30

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

    一”中关联“多”,就要指定many=True这个参数 # 比如这里要查询出属于本书的所有英雄人物的信息,字段名必须是 关联模型名+'_set'这种格式,如“heroinfo_set” heroinfo_set...,比如id id = serializers.IntegerField(label='ID', read_only=True) # required属性表示api传递数据过来的时候这个字段是不是必须的..., # 一般在Django的Model没有默认值的时候都是必须的,否则会报错 title = serializers.CharField(max_length=20, label='书名...一”中关联“多”,就要指定many=True这个参数 # 比如这里要查询出属于本书的所有英雄人物的信息,字段名必须是 关联模型名+'_set'这种格式,如“heroinfo_set” heroinfo_set...一般来说,如果是为Django的模型类写序列化器就选择ModelsSerializer,因为它帮我们做了很多事情,需要写的代码比较少;如果后端没有对应的模型类,那么就只能选择Serializer。

    22810

    Django项目之Elasticsearch搜索引擎

    framework中使用haystack而进行的封装(如果在Django中使用haystack,则安装django-haystack即可)。...=True) document=True 表名该字段是主要进行关键字查询的字段 use_template=True 表示通过模板来指明索引值由哪些模型类字段组成 5)在templates...}} {{ object.id }} 路径固定: templates/search/indexes/建立索引的应用名/文件名.txt 通过sku的name、caption、id来进行关键字索引查询...base_name='skus_search') urlpatterns += router.urls bug说明: 如果在配置完haystack并启动程序后,出现如下异常,是因为drf-haystack还没有适配最新版本的...REST framework框架 importError: cannot import name '_get_count' 可以通过修改REST framework框架代码,补充_get_count函数定义即可

    1.1K20

    RESTframework_一

    在前后端分离的应用模式中,后端仅返回前端所需的数据,不再渲染HTML页面,不再控制前端的效果. 在前后端分离的应用模式中,前端与后端的耦合度相对较低....: 将JSON数据转化为Python数据 总结 开发REST API ,视图操作 将数据库序列化为前端所需要的格式,并返回 将前端的数据反序列化为模型类对象,并保存到数据库中 REST framework...(label='ID', read_only=True) btitle = serializers.CharField(label='名称', max_length=20) bpub_date...(label='图书',read_only=True) # 2.字符串形式输出 # {'name': '乔峰', 'gender': True, 'comment': '降龙十八掌', 'book_id...': '降龙十八掌', 'book_id': 2, 'book': 'Book: 2-天龙八部'} # book = BookRelateField(read_only=True) 反序列化操作 验证

    72820

    测试开发进阶(二十九)

    方法 两个类视图所对应的url地址不一致 再次优化 优化思路:使用动作来触发,而不是请求方法 from rest_framework import viewsets viewsets不再支持 get/post.../put/delete等请求方法,而只支持action动作 但是 ViewSet类中没有提供 get_object(), get_serializer等方法 继承 viewsets.GenericViewSet...第二个参数viewset为视图集「不要加as_view」 将自动生成的路由添加到列表中 from django.urls import path, includefrom projects import...参数用于指定该动作支持的请求方法,默认为get detail用于指定该动作要处理的是否为详情资源对象「url是否需要传递pk值」 在 url.py中添加 path('project/names/', views.ProjectsViewSet.as_view...=True, many=True) class Meta: model = Projects fields = ('id', 'interfaces_sets') 添加自定义

    67110

    django-rest-framewor

    源码繁琐,多说无益,耐心细读官方文档: https://www.django-rest-framework.org/ 个人总结: REST是一种软件架构设计风格,不是标准,也不是具体的技术实现,只是提供了一组设计原则和约束条件...DRF(Django RestFramework)是一套基于Django开发的、帮助我们更好的设计符合REST规范的Web应用的一个Django App,所以,本质上,它是一个Django App。...=32, read_only=True, source='publish.name') publish_city = serializers.CharField(max_length=32, read_only...返回结果 5 认证组件   cookie和session两种方式可以保存用户信息,这两种方式不同的是cookie保存在客户端浏览器中,而session保存在服务器中,他们各有优缺点,配合起来使用,可将重要的敏感的信息存储在...,更新token值   创建俩个model,(token可以存储在user表中,建议存储在user表中): from django.db import models # Create your models

    1.6K10

    Django中ORM操作

    前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb...BigAutoField(AutoField) - bigint自增列,必须填入参数 primary_key=True 注:当model中如果没有自增列,则自动会创建一个列名为...# 获取id大于1的值 # models.Tb1.objects.filter(id__gte=1) # 获取id大于等于1的值 # models.Tb1...# 获取id小于10的值 # models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值 #...Foreign_Key字段在哪张表决定的, Foreign_Key字段在哪张表就可以哪张表使用Foreign_Key字段连表,反之没有Foreign_Key字段就使用与其关联的 小写表名; 1对多:对象

    4.8K10

    python测试开发django-rest-framework-88.反序列化

    前言 serializers.Serializer可以对modle模型中的字段序列化,并且必须写create和update两个方法。...用户在添加商品的时候,需要把数据存到数据库,这个过程我们需要先校验是不是合法的。 ?...对用户传入的数据,我们需要先清洗下,因为用户可能会传一些数据库表里面没有的字段,这些我们不需要,于是可以用到 GoodsSerializer(data=request.data) data 用户传入的参数...校验忽略某些字段read_only=True 如果在创建商品的时候,有些字段我不想让用户去修改,比如 goods_status(商品状态),默认就是出售中, ?...这里涉及到传入参数的2个值互相校验 # 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ class GoodsSerializer

    65430
    领券