Задать вопрос
@daniil-orlovv
Junior Python-developer

Как правильно отфильтровать через связанное поле ManyToMany с помощью django-filters?

Есть модель Book и Category. Они связаны через поле category в модели Book.

При фильтрации с помощью django-filters по полю `categories` выдает все записи. Я делаю что-то не так, но не знаю что.

models.py
from django.db import models


class Category(models.Model):
    title = models.TextField()


class Book(models.Model):
    title = models.TextField()
    isbn = models.TextField(null=True, blank=True)
    pagecount = models.IntegerField(null=True, blank=True)
    publisheddate = models.TextField(null=True, blank=True)
    thumbnailurl = models.TextField(null=True, blank=True)
    shortdescription = models.TextField(null=True, blank=True)
    longdescription = models.TextField(null=True, blank=True)
    status = models.TextField()
    authors = models.JSONField()
    categories = models.ManyToManyField(
        Category,
        blank=True
    )


views.py
from rest_framework.viewsets import ReadOnlyModelViewSet
from rest_framework.generics import CreateAPIView, ListAPIView
from django_filters.rest_framework import DjangoFilterBackend

from api.models import Book, Category, FeedBack
from api.serializers import BookSerializer, CategorySerializer, FeedBackSerializer
from api.filters import BookFilter


class ListRetrieveBook(ReadOnlyModelViewSet):
    """
    Получение всех книг, книг по категории, конкретной книги.
    """

    queryset = Book.objects.all()
    serializer_class = BookSerializer
    filter_backends = (DjangoFilterBackend,)
    filterset_fields = ('categories__title',)


В общем, если делаю фильтрацию по id: filterset_fields = ('categories',), то фильтрует норм, а если filterset_fields = ('categories__title',), то просто возвращает все записи.
  • Вопрос задан
  • 115 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@daniil-orlovv Автор вопроса
Junior Python-developer
Я допустил, ошибку, неправильно делая запрос:
http://127.0.0.1:8000/api/v1/books?categories=<Название категории>


Сработал запрос вида:
http://127.0.0.1:8000/api/v1/books?categories__title=<Название категории>


Может кому то поможет..
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы