在Django休息框架中序列化外键(A-> B-> C)

时间:2018-01-19 09:03:35

标签: nested django-rest-framework foreign-keys

如何序列化已经引用另一个表的外键的外键。目前我有三个表A,B和C(A-> B-> C)。 A指的是B而B指的是C.我需要获得如下所示的JSON

A:
{
 A_id:1,
 A_name:'aaa',
 B:
 {
   B_id:1,
   B_name:'bbb'
   C:
   {
     C_id:1,
     C_name:'ccc'
    }
  }
 }

我能够获得一个参考的JSON。即; A->乙 我使用RelatedField并覆盖to_representation函数来实现此目的。这是我使用的代码

class B_foreign(serializers.RelatedField):
    def to_representation(self, value):
        return value


class ASerializer(serializers.ModelSerializer):
    B = B_foreign(source='B_id', read_only=True)
    class Meta:
        model = A
        fields = '__all__'

现在,我将如何从B中引用“C”?做另一个RelatedField类并覆盖to_representation()函数? 我也试过了。它没用。有人可以帮我解决问题吗?

1 个答案:

答案 0 :(得分:0)

您只需使用给定型号的序列化器:

class CSerializer(serializers.ModelSerializer):

    class Meta:
        model = C
        fields = '__all__'


class BSerializer(serializers.ModelSerializer):

    C = CSerializer()

    class Meta:
        model = B
        fields = '__all__'


class ASerializer(serializers.ModelSerializer):

    B = BSerializer()

    class Meta:
        model = A
        fields = '__all__'