Как составить список всех элементов на основе внешнего ключа pk Django Rest Framework

Я хочу получить список всех экземпляров, которые сохранены для определенного животного. Допустим, собака имеет id 3, и у меня есть 2 экземпляра пола собаки, но когда я получаю запрос от animal/3/sex, я получаю только один экземпляр, а не два. Я пробовал использовать many=True в serializers.PrimaryKeyRelatedField, но он показывает, что 'Animal is not iterable'. Есть ли у вас идеи, как это сделать?

class AnimalSex(models.Model):
    name = models.CharField(max_length=256)
    slug = models.SlugField(max_length=128, unique=True, null=False, editable=False)
    created_at = models.DateTimeField(editable=False, default=timezone.now)
    updated_at = models.DateTimeField(default=timezone.now)
    animal = models.ForeignKey(Animal, on_delete=models.CASCADE, null=False)

ПРОСМОТРОВ

class MyAnimalSex(generics.RetrieveAPIView):

    queryset = AnimalSex.objects.all()
    serializer_class = AnimalSexSerializer
    lookup_field = 'pk'

SERIALIZER

class AnimalSexSerializer(serializers.ModelSerializer):

    animal = serializers.PrimaryKeyRelatedField(read_only=True)

    class Meta:
        model = AnimalSex
        fields = ('name', 'slug', 'animal',)

URL

    path('animal/<int:pk>/sex', MyAnimalSex.as_view()),

В этом случае вы, вероятно, захотите использовать ListAPIView и фильтровать на основе первичного ключа Animal, так:

class MyAnimalSex(generics.ListAPIView):
    queryset = AnimalSex.objects.all()
    serializer_class = AnimalSexSerializer

    def get_queryset(self):
        return super().get_queryset().filter(
            animal_id=self.kwargs['pk']
        )
Вернуться на верх