我试图弄清楚如何按值过滤ManyToMany字段.在Django中,它就像queryset.filter(m2mfield__name)一样简单,但我无法弄清楚我错过了什么.我正在使用Django Rest Framework和DjangoFilterBackend.
楷模:
class City(models.Model):
name = models.CharField(max_length=80)
class State(models.Model):
name = models.CharField(max_length=50)
cities = models.ManyToManyField(City)
Run Code Online (Sandbox Code Playgroud)
过滤器:
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')
Run Code Online (Sandbox Code Playgroud)
串行器:
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
Run Code Online (Sandbox Code Playgroud)
视图:
from rest_framework.generics import ListAPIView, RetrieveAPIView
from .serializers import StateSerializer …Run Code Online (Sandbox Code Playgroud)