Reputation: 427
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?
Upvotes: 0
Views: 249
Reputation: 1458
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/
Upvotes: 1