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

Как настроить фильтрацию по категории для модели Book при использовании django-filters, чтобы получать записи только по указанной категории?
  • 18 марта 2024 г. 13:49
Ответы на вопрос 2
Для настройки фильтрации по связанному полю ManyToMany с использованием django-filters, вам нужно создать класс фильтра, который будет использовать метод `ModelMultipleChoiceFilter` для поля ManyToMany.

Пример:

```python
import django_filters
from .models import Book

class BookFilter(django_filters.FilterSet):
    category = django_filters.ModelMultipleChoiceFilter(field_name='category__name', to_field_name='name', queryset=Category.objects.all())

    class Meta:
        model = Book
        fields = ['category']
```

В данном примере, `category` - это поле ManyToMany, для которого мы настраиваем фильтрацию. Мы указываем `field_name='category__name'` чтобы фильтровать по названию категории.

Для настройки фильтрации по категории для модели Book при использовании django-filters, вам также нужно создать класс фильтра, который будет использовать метод `ModelChoiceFilter` для поля категории.

Пример:

```python
import django_filters
from .models import Book

class BookFilter(django_filters.FilterSet):
    category = django_filters.ModelChoiceFilter(field_name='category__name', to_field_name='name', queryset=Category.objects.all())

    class Meta:
        model = Book
        fields = ['category']
```

В данном примере, мы использовали `ModelChoiceFilter` для поля категории, чтобы получать записи только по указанной категории.
Я допустил, ошибку, неправильно делая запрос: <br/> <pre><code>http://127.0.0.1:8000/api/v1/books?categories=&lt;Название категории&gt;</code></pre> <br/> <br/> Сработал запрос вида: <pre><code>http://127.0.0.1:8000/api/v1/books?categories__title=&lt;Название категории&gt;</code></pre> <br/> <br/> Может кому то поможет..
Похожие вопросы