Сериализация полей модели, связанных с другой моделью - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть четыре модели, связанные так:

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

Однако я хочу отображать только поля связанных объектов A при сериализации D и не включать объекты C или B.Как мне это сделать?

1 Ответ

0 голосов
/ 10 декабря 2018

вы можете определить serializers.SerializerMethodField() в 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')

Документ: https://www.django -rest-framework.org / api-guide / fields /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...