Chr*_*eek 3 python django django-rest-framework
我已将模型序列化为具有外键的 JSON。API 将显示外键的标题,但不会嵌套属于该外键的数据。我该怎么做呢。
序列化程序.py
class ReportFieldSerializers(serializers.ModelSerializer):
form = serializers.RelatedField()
class Meta:
model = ReportField
fields = (
'id',
'title',
'form'
)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
模型.py
class Report(models.Model):
title = models.CharField()
form = models.ForeignKey()
class Form(models.Model):
# Form details
Run Code Online (Sandbox Code Playgroud)
有一个选项depth,可以在序列化程序的 Meta 类中使用。例如:
class ReportFieldSerializers(serializers.ModelSerializer):
class Meta:
model = ReportField
fields = (
'id',
'title',
'form'
)
depth = 1
Run Code Online (Sandbox Code Playgroud)
这将在相关模型中下降一级。如您所见,您不需要RelatedField. 比方说,如果有第三个模型类,例如:
class Form(models.Model):
example = ForeignKey('AnotherModel')
class AnotherModel(models.Model):
# model fields
Run Code Online (Sandbox Code Playgroud)
您也可以使用depth=2in yourReportFieldSerializer来显示此模型的信息。
我假设在您的模型中,Report该字段form显示为Form: models.ForeignKey(Form)。
我在这里已经回答了一个类似的问题: Django rest_framework serializer with internal relationship
| 归档时间: |
|
| 查看次数: |
4282 次 |
| 最近记录: |