过滤里面Django的REST框架领域
问题描述:
我有以下型号:过滤里面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()
您知道如何执行此操作吗?