Использование поля ListCharField в качестве поля фильтрации
Я пытаюсь реализовать API, в котором можно было бы фильтровать объекты с помощью ListCharField
, называемого categories
. Я хочу, чтобы объект фильтровался, если любое из значений в его поле categories
совпадает с искомой категорией.
В моей реализации объекты сопоставляются, только если все значения в categories
совпадают.
Пример:
Рассмотрим объект A
с categories='fun','party'
и B
с categories='fun'
.
Тогда http://127.0.0.1:8000/theme/?categories=fun
совпадает не с A
, а только с B
.
Модель:
class Themes(models.Model):
id = models.CharField(max_length=64, unique=True, default=gen_uuid4_th
name = models.CharField(max_length=128)
description = models.CharField(max_length=512)
categories = ListCharField(base_field=models.CharField(max_length=32), size=5, max_length=(6*33), null=True)
Вид:
class ThemesView(viewsets.ModelViewSet):
serializer_class = AgendaTemplateSerializer
permission_classes = (IsMemberUser,)
filter_backends = (filters.DjangoFilterBackend,)
filterset_fields = ('categories',)
def get_permissions(self):
...
def get_queryset(self):
return Themes.objects.filter(Q(team__isnull=True) | Q(team=self.request.mp.team.teamid), is_archived=False) \
.order_by('-created_at')