python - Django 休息框架 : how do I Display content of Foreign keys in JSON

标签 python django django-rest-framework

我已将模型序列化为具有外键的 JSON。 API 将显示外键的标题,但不会嵌套属于该外键的数据。我该怎么做。

序列化器.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)

模型.py

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

class Form(models.Model):
    # Form details

最佳答案

有一个选项depth,可以在序列化器的Meta类中使用。例如:

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 serializer with inner relationship

关于python - Django 休息框架 : how do I Display content of Foreign keys in JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26718636/

相关文章:

python - Django休息框架: Nested object not passing to validated_data

python - 当我尝试使用 winrt 发出通知时,它会出错

python - 对于 x in y() : how does this work?

python - Django 部署上的内部服务器错误

python - 如何在 Python Django 中传递多个键值对作为查询参数?

python - ListSerializer 断言错误

python - Django Rest 返回 0 字节 zip 文件作为响应

python - Google Assistant API,控制连接到 Google Home 的电灯开关

python - 如何让 matplotlib 在 IPython 下工作?

Django:如果可能的话,将 CharField 转换为 Integer