2015-02-10 73 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() 

您知道如何執行此操作嗎?

回答