Вы можете изменить ваши модели примерно так:
class Parent(models.Model):
name = models.CharField(max_length=100)
class Child1(models.Model):
name = models.CharField(max_length=100)
parent = models.ForeignKey(Parent, related_name="children1")
class Child2(models.Model):
name = models.CharField(max_length=100)
parent = models.ForeignKey(Parent, related_name="children2")
Тогда в сериализаторе вы можете указать что-то вроде этого:
class ParentSerializer(serializers.ModelSerializer):
child1 = serializers.SerializerMethodField()
child2 = serializers.SerializerMethodField()
class Meta:
model = Parent
fields = (
"name",
"child1",
"child2",
)
read_only_fields = ("name")
def get_child1(self, parent):
return Child1Serializer(many=True, instance=parent.children1.all()).data
def get_child2(self, parent):
return Child2Serializer(many=True, instance=parent.children2.all()).data
В дочернем сериализаторе many=True
, потому что несколько дочерних могут иметь иностранный ключ к родителю, поэтому для каждого родителя может быть более 1 дочернего. Если вы хотите вернуть только один дочерний элемент, вы можете сделать many=False
, но затем убедиться, что вы передаете только одну дочернюю модель в экземпляре