【问题标题】:How to serialize a related object Django Rest Framework如何序列化相关对象 Django Rest Framework
【发布时间】:2021-09-22 01:14:20
【问题描述】:
class Flight(models.Model):
field_1
field_2
field_3
class Approach(models.Model):
flight_object(models.ForeignKey, 'Flight')
approach_type
number
Approach 与 InlineFormset 相关。如何通过创建新方法对象的能力序列化嵌套到 Flight 中的方法。我不确定正确的术语是否使这一点更难实现。我的目标是创建一个新的 Flight 对象,其中 Approach 作为 React Native 项目的 FlightForm 中的相关对象。
【问题讨论】:
标签:
python-3.x
django
django-rest-framework
【解决方案1】:
我假设了预期的响应 json
{
"field_1": "value1",
"field_2": "value2",
"field_3": "value3",
"approch_set": {
"approach_type": "value",
"number": 22
}
}
为了这个预期的结果,我们将定义两个序列化器。
class ApproachSerializer(serializers.ModelSerializer):
class Meta:
model = Approach
fields = ('approach_type', 'number', )
class FlightSerializer(serializers.ModelSerializer):
approach_set = ApproachSerializer(many=true)
class Meta:
model = Flight
fields = "__all__"
在视图类中,您可以像这样返回FlightSerializer 数据。
class FlightApiView(APIVIew):
def get(self, request):
flights = Flight.objects.all()
return Response({'data': FlightSerializer(flights, many=True).data})
更多你可以阅读the documentation
【解决方案2】:
approaches = SerializerMethodField(source='get_approaches')
def get_approaches(self, obj):
approach_queryset = Approach.objects.filter(flight_object=obj.pk)
return ApproachSerializer(approach_queryset, many=True).data
这终于奏效了,只想回来分享一下。
谢谢@shourav