如何在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)