Django Rest Framework (filtro GET en el campo ManyToMany)

Estoy tratando de descubrir cómo filtrar un campo ManyToMany por valor. En Django, es tan simple como queryset.filter (m2mfield__name), pero no puedo entender lo que me falta. Estoy usando elDjango Rest Framework, y elDjangoFilterBackend.

Modelos:

class City(models.Model):
    name = models.CharField(max_length=80)

class State(models.Model):
    name = models.CharField(max_length=50)
    cities = models.ManyToManyField(City)

Filtros:

import django_filters

class StateFilter(django_filters.FilterSet):
    cities = django_filters.CharFilter(
        name='cities__name',
        lookup_type='contains',
    )

    class Meta:
        model = State
        fields = ('name', 'cities')

Serializadores:

class CitySerializer(serializers.ModelSerializer):
    class Meta:
        model = City
        fields = ('name', )

class StateSerializer(serializers.ModelSerializer):
    cities = CitySerializer(many=True)

    class Meta:
        model = State
        fields = ('name', 'cities')
        filter_class = StateFilter

Ver:

from rest_framework.generics import ListAPIView, RetrieveAPIView
from .serializers import StateSerializer

class StateList(ListAPIView):
    queryset = State.objects.all()
    serializer_class = StateSerializer
    filter_fields = ('name', 'cities')

La salida para ../api/states/ es actualmente:

 [
     "name": "Florida",
     "cities": [
          "name": "Tampa",
          "name": "St. Petersburg",
          "name": "Orlando"
     ],
     "name": "North Carolina",
     "cities": [
          "name": "Raleigh",
          "name": "Charlotte",
          "name": "Greensboro"
     ]
 ]

¿Cómo puedo filtrar las ciudades a través de una llamada GET por nombre como:

../api/states/?cities=Charlotte

El resultado de lo anterior debe ser:

 [
     "name": "North Carolina",
     "cities": [
          "name": "Raleigh",
          "name": "Charlotte",
          "name": "Greensboro"
     ]
 ]

Respuestas a la pregunta(1)

Su respuesta a la pregunta