小编Mic*_*l B的帖子

Django Rest Framework(在ManyToMany字段上的GET过滤器)

我试图弄清楚如何按值过滤ManyToMany字段.在Django中,它就像queryset.filter(m2mfield__name)一样简单,但我无法弄清楚我错过了什么.我正在使用Django Rest FrameworkDjangoFilterBackend.

楷模:

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)

django django-filter django-rest-framework

5
推荐指数
1
解决办法
3197
查看次数