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

如何使用外键选择要在DRF中显示的字段

在DRF(Django REST Framework)中,可以使用外键来选择要显示的字段。外键是一种关系字段,用于在不同模型之间建立关联。下面是使用外键选择要在DRF中显示的字段的步骤:

  1. 首先,在定义模型时,使用外键字段来建立模型之间的关联。例如,如果有两个模型A和B,其中B模型具有外键指向A模型,可以在B模型中定义一个外键字段,指向A模型。
  2. 在DRF的序列化器中,定义一个字段,用于表示外键关系。可以使用PrimaryKeyRelatedFieldStringRelatedField来表示外键关系。PrimaryKeyRelatedField将显示外键的主键值,而StringRelatedField将显示外键关联模型的__str__方法返回的字符串。
  3. 如果想要显示外键关联模型的特定字段,可以使用SlugRelatedFieldHyperlinkedRelatedFieldSlugRelatedField将显示外键关联模型的指定字段的值,而HyperlinkedRelatedField将显示一个超链接,指向外键关联模型的详细信息。

下面是一个示例:

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

class A(models.Model):
    name = models.CharField(max_length=100)

class B(models.Model):
    a = models.ForeignKey(A, on_delete=models.CASCADE)
    field1 = models.CharField(max_length=100)
    field2 = models.CharField(max_length=100)

# serializers.py
from rest_framework import serializers
from .models import A, B

class BSerializer(serializers.ModelSerializer):
    a = serializers.PrimaryKeyRelatedField(queryset=A.objects.all())
    # 或者使用以下字段来显示关联模型的特定字段
    # a = serializers.SlugRelatedField(slug_field='name', queryset=A.objects.all())
    # a = serializers.HyperlinkedRelatedField(view_name='a-detail', read_only=True)

    class Meta:
        model = B
        fields = ['a', 'field1', 'field2']

# views.py
from rest_framework import generics
from .models import B
from .serializers import BSerializer

class BList(generics.ListCreateAPIView):
    queryset = B.objects.all()
    serializer_class = BSerializer

在上面的示例中,BSerializer定义了一个名为a的外键字段,它使用PrimaryKeyRelatedField来显示外键关联模型A的主键值。如果想要显示A模型的特定字段,可以使用SlugRelatedFieldHyperlinkedRelatedField

这是一个简单的示例,你可以根据自己的需求进行调整和扩展。关于DRF的更多信息和详细用法,请参考DRF官方文档

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

相关·内容

如何使用 Django 更新模型字段(包括字段

本教程将详细介绍如何通过 Django 更新模型字段,重点讨论了解决字段更新方法,特别是使用 attrs 方式实现。1. 简介Django 模型是应用程序管理数据核心部分。...设计模型我们将以一个简单案例来说明如何更新模型字段。假设我们有两个模型:学生表(Student)和成绩表(Score)。成绩表 student 字段是一个,指向学生表相应记录。...常见方式是使用模型实例 save() 方法来保存修改。对于字段更新,我们可以使用直接设置字段方式,而不需要每次都查询对象。...下面我们详细探讨这种更新方式:使用 attrs 方式更新字段在 Django ,可以直接通过设置字段方式来更新模型关联。...总结与实践建议在本教程,我们深入探讨了如何使用 Django 更新模型字段,特别是处理字段更新方法。

21710

Django学习-第七讲:django 常用字段字段属性,和表关系、操作

比如我们想要在数据库映射时候使用自己指定表名,而不是使用模型名称。那么我们可以在Meta类添加一个db_table属性。...和表关系 在MySQL,表有两种引擎,一种是InnoDB,另外一种是myisam。如果使用是InnoDB引擎,是支持约束存在使得ORM框架在处理表关系时候异常强大。...第一个参数是引用是哪个模型,第二个参数是在使用引用模型数据被删除了,这个字段如何处理,比如有CASCADE、SET_NULL等。这里以一个实际案例来说明。...即只要这条数据引用了那条数据,那么就不能删除外那条数据。 3.SET_NULL:设置为空。如果那条数据被删除了,那么在本条数据上就将这个字段设置为空。...如果设置这个选项,前提是要指定这个字段一个默认值。 5.SET():如果那条数据被删除了。那么将会获取SET函数值来作为这个值。

4K30
  • Django基表创建、字段属性简介、脏数据概念、子序列化

    更合理) """ Django orm中外字段属性详解 在建表之前我们对外字段属性进行了解: 1)related_name在外设置反向查询字段名:正向找字段名,反向找related_name...例子:部门没有了,部门员工里部门字段改为未分组部门id SET_NULL使用时候需要NULL=True;假设A表依赖B表,B记录删除,A表字段重置为NULL,所以必须配合NULL=True使用...例子:部门没有了,部门员工里部门字段改为未分组部门id字段为NULL 注:多对多字段不能设置on_delete级联关系,如果要处理级联关系,需要手动明确关系,处理表关系多个 3)db_constraint...,将两张表设置为级联,并将反向查询字段名设置为detail 数据库脏数据介绍 数据库中常见并发操作所带来了一致性问题包括:丢失修改,不可重复读,读“脏”数据,幻读。...子序列化使用方法及注意事项: 1)只能在序列化中使用 2)字段名必须是(正向反向都可以)字段,相对于自定义序列化外字段,自定义序列化字段不能参与反序列化,而子序列化必须为键名,子序列化字段不写入数据库

    4.3K30

    重点内容回顾-DRF

    重点内容回顾-DRF 1. on_delete on_delete是定义模型类中外一个选项。 on_delete选项指明是主表删除数据时候,对于引用表数据如何处理。...b.PROTECT保护,通过抛出一个异常ProtectedError异常,来阻止删除主表中被引用数据。...c.SET_NULL设置为 NULL,代表是主表删除数据时候,将关联表数据设置为NULL。仅仅在该字段null=True,允许为null时可用。...2. related_name related_name是在定义模型类时,一个选项。它功能下面慢慢给大家分析一下。...在使用ModelSerializer时候,可以使用model来指定模型类,使用fields来指定具体生成字段使用exclude可以明确排除掉哪些字段使用readonlyfields来指明只读字段

    2.4K20

    drf框架serializersModelSerializer类简化序列化和反序列化操作

    0905自我总结 drf框架serializersModelSerializer类 基于seriallizer类进行简化 https://www.cnblogs.com/pythonywy/p/11455508....html 一.简单使用 导入from rest_framework import serializers 与基础serializer类后续使用作用相似 class 自定义名称(serializers.ModelSerializer...='__all__' 为所有字段 # exclude = ('id', 'is_delete') # 刨除某些字段 # depth = 1 # 跨表自动深度(展示所有字段...) 注意点 其中fields与exclude不能共存 depth不能控制显示字段,与相关表会全部显示出来 二.利用模型类方法进行指导字典生成 例如有两个模型A与B,他们c字段关联 modles.py...框架自带Response 注意点:save源码我们可以看到instance有值调用updata方法,没有值调用create方法.所以修改必须加instance参数,传参数基本上是修改之前对象 有关删除

    1.5K20

    Django Swagger文档库drf-spectacular

    因此我选择使用Swagger文档,之前使用drf-yasg,但是drf-yasg现在还不支持OpenAPI 3.0,而在drf-yasg官方文档为我们推荐了另一个库:drf-spectacular...,参数意义如下: operation_id:一个唯一标识ID,基本用不到 parameters:添加到列表附加或替换参数去自动发现字段。.../authentication.py文件可以看到,这个作用就是在文档显示什么样认证页面 对于认证页面的显示,主要是根据settings.py配置 REST_FRAMEWORK = {...,因此页面就会显示两种认证方式 BUG 目前使用存在一个BUG,就是对于read_only字段,按照我们理解就是在查询请求是返回给客户端,而创建时在请求体不需要包含。...在默认生成swagger界面上,我们看到情况与理解一样,对于JSON参数请求是没有问题,我们只需要输入必填字段就可以了,但是如果是form-data参数,虽然显示依然不包含read_only

    1.9K20

    DRF多对多ManytoMany字段更新和添加

    背景:drf序列化器给模型输出带来了便利但是对于多对多字段网上查询内容却是很少(也有可能是本人不会搜答案)经过我多个日夜摸索,终于实现了我需求,现将自己心得记录一下说下我需求:定义一个订单模型里面的订单...orderId 是自动生成UUID订单区域是,下单人也是,菜品orderMenu是一个多对多字段(其实通过我查到方法说都是字段就可以实现但是个人觉得菜品和订单应该是多对多会比较好理解...)就这样给自己挖了坑因为想要在添加订单同时也要添加对应菜品数量于是自定义了中间表并且添加了数量字段(噩梦开始~~~)首先是定义模型类models.py# models.pyimport django.utils.timezone...# 实例Orderordercenterthough_set查找表传入查找字段并用data序列话出来 reason = OrderCenterThoughSerializer...主要是一个思路,drf ModelSerializer 和 ModelViewSet 封装太严实了,通过这样方法来更新和添加多对多字段实属自己技术不成熟。

    91520

    如何使用Vue.js和Axios来显示API数据

    Vue.js非常适合使用这些类型API。 在本教程,您将创建一个使用Cryptocompare APIVue应用程序来显示两个主要加密货币的当前价格:比特币和Etherium。...熟悉JSON数据格式,您可以在JavaScript中了解如何使用JSON来了解更多信息。 熟悉向API发出请求。 有关使用API​​综合教程,请参阅如何在Python3使用Web API 。...在浏览器打开此文件。 您将在屏幕上看到以下输出,其中显示模拟数据: 我们以美元显示价格。 要以额外货币(例如欧元)显示它,我们将在数据模型添加另一个键值对,并在标记添加另一列。...此代码使用v-for指令,它作用类似于for-loop。 它遍历数据模型所有 - 值对并显示每个数据数据。...您学习了如何在页面上显示数据,迭代结果以及将静态数据替换为API结果。 既然您已经理解了基础知识,那么您可以将其他功能添加到您应用程序

    8.7K20

    如何使用Python选择性地删除文件夹文件?

    问题1 问题描述:在一个文件夹,有着普通文件以及文件夹,那么我们如何做到删除全部文件夹而不删除文件呢? 如下图所示,我们想要删除test文件夹所有文件夹,而保留其他文件: ?...Version 1 看到这个问题第一刻,我想到是文件夹没有后缀名,其他文件有后缀名,而拥有后缀名则意味着文件名称里面会有.存在,我们就可以利用这个差别,来区分两者,进而实现问题描述功能。...我们可以看到,test文件夹文件已经全部删除。 ? Version 2.0 但是,后来仔细一想,上面这种方法却存在一个非常大问题,如果普通文件是没有后缀名,也就是文件名称不存在....接着,我又发现了文件夹和普通文件另外一个区别,也就是文件夹是可以使用os.chdir("file_name")这个命令,而普通文件则显然不行,会出现异常。...问题2 问题描述:我们如何做到删除一个文件夹空白文件夹,而不删除其他文件呢? ? 可以看出,问题2是问题1进阶版本,只需要在问题1代码基础上,增加一个判断文件夹是否空白语句即可。

    13.3K30

    Django&DRF重点内容大盘点

    , verbose_name='图书') # cascade是级联,删除主表数据时连同数据一起删除 1.12.3迁移生成表 1)生成迁移文件 python manage.py makemigrations...多对象.属性 例:hero.hbook 2....(heroinfo__hcomment__contains='八') 查英雄(多) 多类.objects.filter(属性__字段__条件=值) 例:heros...使用 1)在配置文件设置配置项MEDIA_ROOT='上传文件保存目录' 2)定义模型类时,图片字段类型使用 ImageField 3)迁移生成表并在admin.py注册模型类,直接登录Admin...站点就可以进行图片上传 2.DRF框架 2.1目的 利用DRF框架快速实现RestAPI接口设计 2.2RestfulAPI接口设计风格 关键点 1)url地址尽量使用名词,不要使用动词 2)请求url

    5.9K20

    十三、首页、商品数量、缓存和限速功能开发

    ,可以有多个商标,一对多关系 brands = BrandSerializer(many=True) # good有一个category,但这个键指向是三级类,直接反向通过...字段定义related_name="sub_cat" # 取二级商品分类 sub_cat = CategorySerializer2(many=True) # 广告商品...#搜索字段 lookup_field = 'goods_id' #动态选择serializer def get_serializer_class(self):...return Response("success") 13.6.drf缓存设置 为了加速网站访问速度,将一些数据放到缓存当中,取数据时候首先去缓存中去,然后再去数据库取...我们用drf一个扩展来实现缓存,github上面的使用说明:http://chibisov.github.io/drf-extensions/docs/#caching  (1)安装 pip

    93100

    Django REST framework+Vue 打造生鲜超市(十二) 十三、首页、商品数量、缓存和限速功能开发

    13.2.新品接口功能开发 在设计Goods model时候有一个字段is_new is_new = models.BooleanField("是否新品",default=False) 实现这个接口只要在...,可以有多个商标,一对多关系 brands = BrandSerializer(many=True) # good有一个category,但这个键指向是三级类,直接反向通过...#搜索字段 lookup_field = 'goods_id' #动态选择serializer def get_serializer_class(self):...return Response("success") 13.6.drf缓存设置 为了加速网站访问速度,将一些数据放到缓存当中,取数据时候首先去缓存中去,然后再去数据库取...我们用drf一个扩展来实现缓存,github上面的使用说明:http://chibisov.github.io/drf-extensions/docs/#caching ?

    1.9K70

    Django REST framework+Vue 打造生鲜超市(七) 八、商品详情页功能

    GoodsListViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin,viewsets.GenericViewSet):  (2)商品轮播图 商品轮播图是一个...GoodsImage fields = ("image",) #商品列表页 class GoodsSerializer(serializers.ModelSerializer): #覆盖字段...(many=True) class Meta: model = Goods fields = '__all__' 8.2.热卖商品接口实现 只需要在过滤器增加“...8.3.drf权限认证 (1)自定义权限 utils文件夹下新建permissions.py,代码如下: 这个官网有实例,直接复制过来就可以了,把其中owner改为user即可 # utils/permissions.py...#搜索字段 lookup_field = 'goods_id' def get_queryset(self): #只能查看当前登录用户收藏,不会获取所有用户收藏

    1.2K110

    第 16 篇:别再手动管理接口文档了

    其中 toc 和 body_html 因为不是 Post 定义字段,所以 drf-yasg 无法知道关于这两个字段说明。 drf-yasg 是如何知道这个接口会返回哪些响应参数呢?...原理是 drf-yasg 会尝试去解析接口对应序列化器(Serializer),从序列化器中提取出对应请求和响应字段(如果序列化器找不到,它会进一步去序列化器关联模型找),因此我们就可以给序列化器定义字段添加说明信息...) 这样两个字段含义就非常清晰了,效果如下: 其它一些没有说明信息字段都可以根据这种方式来添加,只需要找到文档参数在代码对应来源字段就可以了。...responses 参数值是一个字典,字典是 HTTP 响应码,值可以是一个序列化器,这样 drf-yasg 会拿这个序列化器去解析接口响应参数;也可以是一个字符串,drf-yasg 会把字符串直接当做接口响应结果写入文档...如果你在使用过程遇到了问题,首先尝试分析问题原因,然后顺藤摸瓜去找到相关源码,看看库内部是如何处理你所遇到问题,这样就可以针对性地给出解决方案了,这篇教程列出很多问题以及最后给出解决方案

    1.8K20

    Django+Vue开发生鲜电商平台之7.用户登录和注册功能

    一、DRFtoken基本使用 1.DRFtoken登录原理 基于DRF前后端分离登录与单独使用Django登录原理不同,不再需要CSRF验证,DRF提供了许多开箱即用身份验证方案,并且还允许实现自定义方案...综上,选择TokenAuthentication,即选择Token认证方式,需要在settings.py添加到INSTALLED_APPS: INSTALLED_APPS = [ 'django.contrib.auth...2.DRF实现发送短信验证码接口 需要在DRF接入短信验证码发送。...(attrs)方法为attrs变量增加为mobile数据,并且要修改UserProfile模型mobile字段允许为空,修改如下: class UserProfile(AbstractUser)...显然,对于多个字段验证,如果某一个字段验证失败,则提示该字段错误信息,如果多个字段验证失败,则将这些字段错误信息都显示出来。

    4.4K20

    django restframework serializer 增加自定义字段操作

    使用django restframework serializer 序列化在django定义model时,有时候我们需要额外在serializer增加一些model没有的字段。...假设现在有一个Animal模型,其中有name, type, country字段,country为。我们在序列化Animal时,需要额外增加countryarea信息。...当不指定其method_name时,默认为get_field_name 如果使用ModelSerializer并指定字段时,要包含此时定义字段 补充知识:django restframework Serializer...:我们提交表单数据存在于多表(因为表中含有多对多字段),如何验证所有字段,并保存完整数据到各表。...field_name') validated_data = validated_data instance = Model.objects.create(**validated_data) # ...操作

    3.6K40
    领券