Использование поля 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')
Вернуться на верх