如何在Django Rest框架中过滤逗号分隔的字符串?

如何在Django Rest框架中过滤逗号分隔的字符串?,django,django-rest-framework,django-filter,Django,Django Rest Framework,Django Filter,我有一些类似的数据: 位置:“1B、2B、3B、SS” 我希望能够运行一个查询,例如/players/?position=1B,但是,由于项目之间用逗号分隔,因此当前不会返回任何内容 下面是views.py的精简版本: class CharInFilter(django_filters.BaseInFilter, django_filters.CharFilter): pass class PlayerProfileFilter(django_filters.FilterSet):

我有一些类似的数据:

位置:“1B、2B、3B、SS”

我希望能够运行一个查询,例如
/players/?position=1B
,但是,由于项目之间用逗号分隔,因此当前不会返回任何内容

下面是views.py的精简版本:

class CharInFilter(django_filters.BaseInFilter, django_filters.CharFilter):
    pass

class PlayerProfileFilter(django_filters.FilterSet):
    position = CharInFilter(field_name='display_position', lookup_expr='in')

有没有这样的方法来过滤数据?

我建议创建一个自定义的过滤类

你可以用你家的东西

或过滤器


你可能想用一个


尝试
查找\u expr='contains'
@伊恩舍林顿:但这不会反过来吗?这意味着该位置应包含
1B、2B、3B、SS
。但很可能这是一个简单的
CharField
,因此只有当玩家的
位置类似于
…1B,2B,3B,SS…
@IainShelvington时,包含才会起作用。你是对的。这正是使用contsins时的行为。这让我更接近了,但现在我猜出了以下错误:
'QuerySet'对象不可调用
@JeremyE my bad。我只是编辑答案。@JeremyE只是提醒一下:如果答案对你有帮助,请投票并接受它:)
from rest_framework import filters

class MyFilter(filters.BaseFilterBackend):
    def filter_queryset(self, request, queryset, view):
        # logic here
        return queryset
from django_filters.filters import Filter

class MyFilter(Filter):
    def filterself, request, queryset, view):
        # logic here
        return queryset
from django.db.models import Q

import django_filters


class PlayerProfileFilter(django_filters.FilterSet):
    position = django_filters.CharFilter(method="my_custom_filter")

    def my_custom_filter(self, queryset, name, value):
        query = Q()
        for position in value.split(","):
            query |= Q(position__contains=position)
        return queryset.filter(query)