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

标签 django django-rest-framework

早上好,

我真的很努力解决从我的 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 调用的一部分返回。当我返回数据时,我收到状态表(1、2、3 等)的 PK,但我没有收到 status_text 字段。

我一直在纠结这个问题并挣扎着。我引用了类似的设置,例如在这篇文章中:
Retrieving a Foreign Key value with django-rest-framework serializers

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

编辑

我也试过:
status_text = serializers.RelatedField(source='sir_status.status_text', read_only=True)


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

关于django - DRF Serializer - 如何返回外键的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55902566/

相关文章:

python - Django 使用测试夹具测试 FileField

Django:在测试用例中获取cookie

django - 一起使用django-nose和django-celery-单元测试

python - django rest 3.1.1 - 具有 "many"属性的一对多序列化器

python - 从自定义 Django 用户模型中删除密码

加载共享库时出现Python错误: libpython3. 5m.so.1.0:无法打开共享对象文件:没有这样的文件或目录

javascript - 如何使用 jQuery 在 Django Autocomplete Light 小部件上捕获更改事件

django - 列表字段序列化程序给出 'ManyRelatedManager' 对象不是 M2M 字段的可迭代错误

json - Django REST - 从序列化程序的自定义 to_internal_value 中运行字段验证

django - DRF 测试模型序列化器 - Django Rest Framework