序列化通过另一个模型相关的模型字段

loading...


0

我有四个模型连接如下:

class A:
  some fields

class B:
  ForeignKey('A')

class C:
  ForeignKey('B')

class D:
  ForeignKey('C')

现在,当我序列化D时,我还想从A序列化相关的模型字段 . 当然,这可以使用嵌套的序列化器来完成,如下所示:

class ASerializer:

  class Meta:
    model = A
    fields = ('id', some fields)

class BSerializer:
  a_s = ASerializer(read_only=True)

  class Meta:
    model = B
    fields('id', 'a_s')

class CSerializer:
  b_s = BSerializer(read_only=True)

  class Meta:
    model = C
    fields('id', 'b_s')

class DSerializer:
  c_s = CSerializer(read_only=True)

  class Meta:
    model = D
    fields('id', 'c_s')

但是,我想在序列化D时仅显示相关A对象的字段,而不包括C或B对象 . 我该怎么做呢?

loading...

1回答

  • 1

    你可以在 class CSerializer 中定义 serializers.SerializerMethodField()

    class DSerializer:
      c_s = serializers.SerializerMethodField()
    
      @staticmethod
      def get_c_s(item):
         return item.c.b.a
    
      class Meta:
        model = D
        fields('id', 'c_s')
    

    文件:https://www.django-rest-framework.org/api-guide/fields/

评论

暂时没有评论!