Фильтрация в 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