Фильтрация в API Django Rest Framework по тегам с несколькими значениями

Мне нужно отфильтровать список рецептов (модель Recipes) в ответе моего API по тегам (Recipes.tags__slug) из параметров запроса которые передаются в следующем виде: http://127.0.0.1:8000/api/recipes/?tags=drinks&tags=dinner. models.py:

class Recipes(models.Model):
    tags = models.ManyToManyField(
        Tags, related_name='recipes', verbose_name='Тег'
    )
    ingredients = models.ManyToManyField(
        Ingredients,
        related_name='recipes',
        through='IngredientRecipe',
        verbose_name='Ингредиенты'
    )

class Tags(models.Model):
    name = models.CharField(max_length=200, unique=True, verbose_name='Имя')
    color = models.CharField(max_length=10, unique=True, verbose_name='Цвет')
    slug = models.CharField(max_length=100, unique=True)

views.py:

from django_filters.rest_framework import DjangoFilterBackend
from .filters import RecipesFilter

class RecipesListRetreveDestroyView(
    viewsets.GenericViewSet,
    mixins.ListModelMixin,
    mixins.RetrieveModelMixin,
    mixins.DestroyModelMixin,
    mixins.CreateModelMixin,
    mixins.UpdateModelMixin
):
    queryset = Recipes.objects.all()
    serializer_class = RecipesSerializer
    create_serializer_class = RecipesCreateSerializer
    filter_backends = [DjangoFilterBackend]
    filterset_class = RecipesFilter
    permission_classes = [IsOwnerOrSafeMethodOnly]

filters.py:

import django_filters

from django_filters import rest_framework as filters

from recipes.models import Recipes


class CharFilterInFilter(filters.BaseInFilter, filters.CharFilter):
    pass


class RecipesFilter(filters.FilterSet):
    tags = CharFilterInFilter(field_name='tags__slug', lookup_expr='in')

    class Meta:
        model = Recipes
        fields = [
            'tags',
            'author',
        ]

Но это работает, если передавать параметры запроса в таком виде: ?tags=drinks,dinner, а нужно в таком: ?tags=drinks&tags=dinner

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