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