Django Rest Framework:如何在JSON中显示外键的内容
我把一个模型转成了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 序列化器与内部关系