2015-02-10 74 views
0

我有以下型号:过滤里面Django的REST框架领域

class Project(models.Model): 
    """ 
    Describe a Project 
    """ 
    name = models.CharField(max_length=100) 
    classroom = models.ManyToMany(Classroom) 
    ... 
    tags = models.ManyToManyField(Tag, blank=True) 

class Tag(models.Model): 
    name = models.CharField(max_length=30) 
    classroom = models.ForeignKey(Classroom) 

项目是属于多个教室。用户可以根据教室将标签附加到项目中。例如:

Classroom A: 
Project 1 -> Tags:Math,English 
Classroom B: 
Project 1 -> Tags:English 

我设计了一个带Django Rest Framework的API来获取Projects及其相关标签。

Request: GET /api/projects/1 
Response: 
{ 
    "name":"Project 1", 
    "id": 1, 
    "classroom" : [ 
     "ClassroomA","ClassroomB" 
    ], 
    "tags":[ 
     "Math","English" 
    ] 
} 

我需要实现什么,当我filetring课堂,在我只效应初探有相关的标签,例如:

Request: GET /api/projects/1/?classroom=ClassroomA 
Response: 
{ 
    "name":"Project 1", 
    "id": 1, 
    "classroom" : [ 
     "ClassroomA" 
    ], 
    "tags":[ 
     "Math","English" 
    ] 
} 

Request: GET /api/projects/1/?classroom=ClassroomB 
Response: 
{ 
    "name":"Project 1", 
    "id": 1, 
    "classroom" : [ 
     "ClassroomB" 
    ], 
    "tags":[ 
     "English" 
    ] 
} 

我能够过滤API的结果,但我无法根据GET参数中的教室过滤每个字段的内部:

# serializers.py 
class ProjectSerializer(serializers.ModelSerializer): 
    classroom = serializers.SlugRelatedField(many=True, read_only=True, slug_field='name') 
    tags = serializers.SlugRelatedField(many=True, slug_field='name', read_only=True) 

# filter.py 
import django_filters 
from ...models import Project 

class ProjectFilter(django_filters.FilterSet): 
    classroom = django_filters.CharFilter(name="classroom__name") 

    class Meta: 
     model = Project 
     fields = ['classroom'] 

# views.py 
class SimViewSet(ReadProductPermission, viewsets.ModelViewSet): 
    serializer_class = ProjectSerializer 
    filter_class = ProjectFilter 
    queryset = Project.objects.all() 

您知道如何执行此操作吗?

回答