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()
您知道如何執行此操作嗎?