Django Rest Framework Viewsets Count Foreign Key

Я пытаюсь добавить дополнительное поле к моему modelviewset. Например, если у меня есть 1 родительский и 3 дочерних объекта, я бы хотел, чтобы родительский viewset json выглядел следующим образом. Чтобы получить количество дочерних объектов, я могу сделать что-то вроде children = Child.objects.filter(parent.id=).count(), но я не уверен, как получить id родителя внутри набора представлений.

[
    {
        "id": 1,
        "name": "parent1",
        "child_count": 3
    }
]

models.py

class Parent(models.Model):
    name = models.CharField(max_length=100)

class Child(models.Model):
    name = models.CharField(max_length=100)
    parent = models.ForeignKey("Parent", on_delete=models.CASCADE)

views.py

class ParentViewSet(viewsets.ModelViewSet):
    serializer_class = ParentSerializer

    
    children = Child.objects.filter() # ??

    def get_queryset(self):
        queryset = Parent.objects.all().annotate(child_count=) # ??

        return queryset

serializers.py

class ParentSerializer(serializers.ModelSerializer):
    
    child_count = serializers.IntegerField()

    class Meta:
        model = Parent
        fields = ["id", "name", "child_count"]

Возможно, существует сокращенный способ получить этот подсчет - однако SerializerMethodField является довольно простым.

class ParentSerializer(serializers.ModelSerializer):
    child_count = serializers.SerializerMethodField()

    class Meta:
        model = Parent
        fields = ["id", "name", "child_count"]


    def get_child_count(self):
        return Child.objects.filter(parent=self.get_object()).count()
Вернуться на верх