Двойной вложенный сериализатор
Есть 3 модели, которые связаны между собой последовательно (models.py):
class A(models.Model):
titleA = models.CharField(max_length=200)
class B(models.Model):
link = models.ForeignKey(A, on_delete=models.CASCADE, related_name='b')
titleB = models.CharField(max_length=200)
class C(models.Model):
link = models.ForeignKey(B, on_delete=models.CASCADE, related_name='c')
titleC = models.CharField(max_length=200)
и сериализаторы (serializers.py):
class BSerializer(serializers.ModelSerializer):
class Meta:
model = B
fields = (['titleB'])
class CSerializer(serializers.ModelSerializer):
class Meta:
model = C
fields = (['titleC'])
class FinalSerializer(serializers.ModelSerializer):
b_list = BSerializer(many=True, read_only=True)
c_list = CSerializer(many=True, read_only=True)
class Meta:
model = A
fields = ('titleA', 'b_list', 'c_list')
views.py:
class MyFinalView(ListAPIView):
serializer_class = FinalSerializer
def get_queryset(self):
return A.objects.all()
и хочу получить на выходе:
[
{
"titleA": "it's A",
"b_list": [
{
"titleB": "it's B", "c_list": [{"titleC" : "it's C"}]
}
]
}
]
но модель "С" в итоге пустая:
[
{
"titleA": "it's A",
"b_list": [
{
"titleB": "it's B"]
}
]
}
]
Как добавить ещё один вложенный сериализатор С?
Ответы (1 шт):
Автор решения: Vadim Gazizov
→ Ссылка
Пока писал вопрос сам на него и ответил: serializers.py:
class BSerializer(serializers.ModelSerializer):
c_list = CSerializer(many=True, read_only=True)
class Meta:
model = C
fields = (['titleB', 'c_list'])
class CSerializer(serializers.ModelSerializer):
class Meta:
model = C
fields = (['titleC'])
class FinalSerializer(serializers.ModelSerializer):
b_list = BSerializer(many=True, read_only=True)
class Meta:
model = A
fields = ('titleA', 'b_list')