Для автора мой ответ будет не актуальным, так как он скорее всего решил проблему. Но приложу свой вариант решения
class ProductFilter(django_filters.rest_framework.FilterSet):
....
category_filter = django_filters.CharFilter(name='category__seo_name', method='filter_category')
....
def filter_category(self, queryset, field_name, value):
try:
categories = Category.objects.get(seo_name=value)
value = categories.get_descendants(include_self=True)
return queryset.filter(**{field_name: value}).select_related('category')
except Category.DoesNotExist:
return queryset.filter(**{field_name: []}).select_related('category')