简体   繁体   中英

Serialize model fields related through another model

I have four models linked like so:

class A:
  some fields

class B:
  ForeignKey('A')

class C:
  ForeignKey('B')

class D:
  ForeignKey('C')

Now, when I serialize D, I want to also serialize related model fields from A. Of course, this can be done using nested serializers like so:

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')

However, I want to only display the fields of related A objects when serializing D and not include C or B objects. How do I do this?

you can define serializers.SerializerMethodField() in class CSerializer :

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')

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM