Как в бэкенде отфильтровать точное поле модели

У меня есть модель Tittle, и я хотел отфильтровать ее GET-ответ по "genres->slug". Я попытался использовать бэкенд-фильтр с помощью filterset_fields = ("genres__slug",). Но это не делает того, о чем я думал. Как я могу отфильтровать его по Slug модели жанров?

views.py

class TitleViewSet(viewsets.ModelViewSet):
    queryset = Title.objects.all()
    permission_classes = (AdminModifyOrReadOnlyPermission,)
    pagination_class = LimitOffsetPagination
    filter_backends = (DjangoFilterBackend, )
    filterset_fields = ('genres',)

    def get_serializer_class(self):
        if self.action == 'list' or self.action == 'retrieve':
            return ReadTitleSerializer
        return WriteTitleSerializer

models.py

class Title(models.Model):

    ... 

    genres = models.ManyToManyField(
        Genre,
        through='GenreTitle',
    )


class Genre(models.Model):
    name = models.CharField(
        max_length=255,
        verbose_name='Название жанра'
    )

    slug = models.SlugField(
        unique=True,
        verbose_name='Слаг жанра'
    )

    def __str__(self) -> str:
        return self.slug


class GenreTitle(models.Model):
    title_id = models.ForeignKey(
        Title,
        on_delete=models.CASCADE,
        related_name='genres_titles'
    )

    genre_id = models.ForeignKey(
        Genre,
        on_delete=models.CASCADE,
        related_name='genres_title'
    )

Вы можете создать другой класс фильтра и реализовать его с именем поля filterset_class в API. https://django-filter.readthedocs.io/en/stable/ref/filterset.html

Вернуться на верх