DRF Serializer - 如何返回外键字段?

2024-03-27

早上好,

我真的很难解决从 Django Rest Framework API 返回值的问题。

我有两个模型,SirTarget 和 Status。 SirTarget 就像一张票证,而 Status 是票证的文本状态标签,对应于处理票证的阶段。

型号如下:

class Status(models.Model):
     status_text = models.CharField(max_length=20)
     status_open = models.BooleanField(default=1)

     def __str__(self):
        return self.status_text


 class SirTarget(models.Model):
     name = models.CharField(max_length=70)
     entry_date = models.DateTimeField(auto_now_add=True)
     last_name = models.CharField(max_length=40)
     first_name = models.CharField(max_length=40)
     sir_status = models.ForeignKey(Status, on_delete=models.CASCADE, default=1, related_name='targets')

     def __str__(self):
        return '%d - %s %s' % (self.id, self.first_name, self.last_name)

我的序列化器如下所示:

 class SirTargetStatusSerializer(serializers.ModelSerializer):
     status_text = serializers.ReadOnlyField(source='Status.status_text')

     class Meta:
         model = SirTarget
         fields = '__all__'

字段 status_text 不会作为 API 调用的一部分返回。当我返回数据时,我收到状态表的 PK(1、2、3 等),但没有收到 status_text 字段。

我已经为此搞乱了一段时间并陷入困境。我在这篇文章中引用了类似的设置:使用 django-rest-framework 序列化器检索外键值 https://stackoverflow.com/questions/17280007/retrieving-a-foreign-key-value-with-django-rest-framework-serializers

然而,似乎没有什么对我有用。

EDIT

我也尝试过:

status_text = serializers.RelatedField(source='sir_status.status_text', read_only=True)

and

status_text = serializers.CharField(source='sir_status.status_text', read_only=True)

当我直接查看数据库时,我会看到我正在寻找的内容并验证这些值是否按预期填充:

# select * from sir_admin_status;
 id |  status_text   | status_open 
----+----------------+-------------
  1 | New            | t
  2 | Open           | t
  3 | Referred       | f
  4 | Resolved       | f
  5 | False Positive | f

DRF 3.9.0 Python 3.7.1

感谢您的帮助。

BCBB


你应该做

class SirTargetStatusSerializer(serializers.ModelSerializer):
     status_text = serializers.CharField(source='sir_status.status_text', read_only=True)

     class Meta:
         model = SirTarget
         fields = ('name', ... , 'status_text') # explicitly define all field you want here
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DRF Serializer - 如何返回外键字段? 的相关文章

随机推荐

  • AnnotationClassLoader的configureRoute()的实现

    在我的 Symfony 3 2 应用程序中 我创建了一个自定义路由器 该路由器扩展自Symfony Bundle FrameworkBundle Routing Router 根据需要 它实现了getRouteCollection meth
  • 如何通过构造函数正确初始化两个类之间的父子引用

    我有两节课 第一类是Parent 其中有一个对象列表 Child 每一个Child参考了他的Parent班级 问题是如何通过构造函数来实现这个引用 public sealed class Child public Child string
  • 如何在magento中创建pdf?

    我想在 magento 中创建后端 管理中产品列表的 pdf 我不知道该怎么做 而且我在互联网上找到的东西也没有那么有帮助 希望有人能帮助我 gr edit class Wouterkamphuisdotcom Web Adminhtml
  • 我可以通过 S3 中的特定文件上传触发 ECS/Fargate 任务吗?

    我知道我可以在上传文件时触发任务 每个https docs aws amazon com AmazonCloudWatch latest events CloudWatch Events tutorial ECS html https do
  • CSS提交按钮和输入文本的宽度不一样

    尽管我准确地制作了提交按钮和输入文本 width 60 但是当我运行应用程序时 它们的宽度不同 loginClass width 40 height 40 margin auto auto loginClass ul li list sty
  • ms access - vba:编译错误:预期:=

    我有一个子程序如下 Public Sub updateStagesTable sName As String percentageValue As Double stageName sName sSQL INSERT INTO Stages
  • 手臂 g++ 中缺少一些东西

    我安装了 CodeSourcery g 工具链并尝试编译一个简单的 hello world 程序 include
  • 我的 PDO 构造错误 - Php

    这是6号线的抱怨声 Warning PDO construct expects parameter 2 to be string array given 伴随着第 7 行错误 Fatal error Call to a member fun
  • 二维数组的按行 numpy.isin [重复]

    这个问题在这里已经有答案了 我有两个数组 A np array 3 1 4 1 1 4 B np array 0 1 5 2 4 5 2 3 5 是否可以使用numpy isin二维数组按行排列 我想检查一下是否A i j is in B
  • 使用用户定义的运行时属性的 UILabel 的cornerRadius 不起作用

    我尝试使用将cornerRadius添加到UILabelUser Defined Runtime Attributes但它没有按预期工作 cornerRadius 没有设置 我想知道我在哪里犯了错误 我附上了它的截图 帮我解决一下 It i
  • JavaScript 中的构造函数和继承

    这是关于 JavaScript 中的 继承 假设我创建一个构造函数 Bird 和另一个名为 Parrot 的构造函数 通过将 Bird 的实例分配给 Parrot 的原型来 继承 Bird 的属性 如以下代码所示 function Bird
  • 使用前缀路由时 url 中的 CakePHP3.x 控制器名称

    我正在尝试在 CakePHP3 中使用前缀路由 我将以下几行添加到 config routes php Router prefix admin function routes All routes here will be prefixed
  • Prefuse:向 GraphView 演示添加边权重

    我正在使用 prefuse 可视化工具包 工具包中的 GraphView 演示非常出色 提供了各种控件来可视化数据 我能够为我的数据集生成 GraphML 并使用 GraphView 对其进行可视化 我希望拥有的另一件事是使用权重或颜色编码
  • Elasticsearch:使用 Java 添加手动映射

    我无法更改映射 有人能帮我找到代码中的错误吗 我根据几个教程找到了更改映射的标准方法 但是 当我尝试调用映射结构时 在手动创建映射后只会出现一个空白映射结构 但是插入一些数据后就会出现映射规范 因为ES当然使用默认的映射规范 更具体的请看下
  • Php $_POST方法获取textarea值

    我正在使用 php 使用 post 方法获取 textarea 值 但得到一个奇怪的结果 让我向你展示我的代码
  • 在没有 VSDBCMD 的情况下部署 VS2010 数据库项目?

    自首次引入 Visual Studio 2010 的数据库项目以来 我们一直在多个内部或单一客户项目中使用它们 到目前为止 它们对我们来说运行良好 现在 我们第一次将它们与 盒装 产品一起使用 该产品需要打包才能安装在任意客户站点 到目前为
  • 可靠的WebSocket连接状态检测

    我一直在寻找实现可靠的 WebSocket 连接恢复机制 经过一番调查 我发现一种方法是将心跳发送到服务器 ping pong 并检查我是否收到整个pong在有限的时间内 因此 如果连接实际上已断开或速度非常慢 则会被视为断开连接 if a
  • 如何修复IntelliJ IDEA方法参数自动完成?

    我正在使用 IntelliJ IDEA 15 我注意到 默认情况下 Eclipse 在编写需要多个参数的方法调用时提供了更方便的自动完成功能 Eclipse 会自动填充默认参数 并允许您通过按快速浏览它们Tab IntelliJ 不这样做
  • 打印转换后的 XML

    由于情况超出了我的控制范围 我将用自制的 XML 报告替换所有的 Crystal 报告 这些报告运行得非常好 对于大多数弹出 Crystal Reports 查看器的报表 以下代码可以在 IE 中很好地打开它们 并通过 XSLT 样式表将其
  • DRF Serializer - 如何返回外键字段?

    早上好 我真的很难解决从 Django Rest Framework API 返回值的问题 我有两个模型 SirTarget 和 Status SirTarget 就像一张票证 而 Status 是票证的文本状态标签 对应于处理票证的阶段