【问题标题】: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 中的相关对象。

【问题讨论】:

  • 你能给我们你期望的序列化 json 格式吗?

标签: 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-12
      • 2015-03-15
      • 1970-01-01
      • 2017-07-12
      • 2018-10-14
      • 2015-06-23
      • 2016-10-22
      • 2015-12-13
      相关资源
      最近更新 更多