Django Rest Framework:如何在JSON中显示外键的内容

3 投票
1 回答
5076 浏览
提问于 2025-05-01 08:34

我把一个模型转成了JSON格式,这个模型里面有外键。API会显示外键的标题,但不会把属于这个外键的数据嵌套在里面。我该怎么做呢?

serializers.py

class ReportFieldSerializers(serializers.ModelSerializer):
    form = serializers.RelatedField()
    class Meta:
        model = ReportField
        fields = (
            'id',
            'title',
            'form'
        )

api.py

class ReportFieldList(APIView):
    def get(self, request, format=None):
        report_field = ReportField.objects.all()
        serialized_report_field = ReportFieldSerializers(report_field, many=True)
        return Response(serialized_report_field.data)

class ReportFieldDetail(APIView):
    def get_object(self, pk):
        try:
            return ReportField.objects.get(pk=pk)
        except ReportField.DoesNotExist:
            raise Http404

    def get(self, request, pk, format=None):
        report_field = self.get_object(pk)
        serialized_report_field = ReportFieldSerializers(report_field)
        return Response(serialized_report_field.data)

models.py

class Report(models.Model):
    title = models.CharField()
    form = models.ForeignKey()

class Form(models.Model):
    # Form details
暂无标签

1 个回答

6

在序列化器的元类中,有一个选项叫做 depth。比如说:

class ReportFieldSerializers(serializers.ModelSerializer):

    class Meta:
        model = ReportField
        fields = (
            'id',
            'title',
            'form'
        )
        depth = 1

这个选项可以让你向下查找相关模型的信息。你会发现,这样做不需要使用 RelatedField。假设还有一个第三个模型类,比如:

class Form(models.Model):
    example = ForeignKey('AnotherModel')

class AnotherModel(models.Model):
    # model fields

你也可以在你的 ReportFieldSerializer 中使用 depth=2,这样就可以显示这个模型的信息了。

我猜在你的模型 Report 中,字段 form 是指向 Form 的: models.ForeignKey(Form)

我之前已经在这里回答过一个类似的问题: Django rest_framework 序列化器与内部关系

撰写回答