I have some data that is similar to this:
position: "1B, 2B, 3B, SS"
I'd like to be able to run a query such as /players/?position=1B
, however, this currently does not return anything because the items are separated by a comma.
Here is stripped down version of the 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')
Is there a way to filter the data in this way?
You probably want to use a custom filter.
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)