Как в бэкенде отфильтровать точное поле модели
У меня есть модель 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