我有以下视图集(我的当前代码)
class TeacherViewSet(viewsets.ModelViewSet):
queryset = Teacher.objects.all()
serializer_class = TeacherSerializer
filter_backends = [DjangoFilterBackend, SearchFilter]
filterset_fields = ['user_id', ]
search_fields = ['=user_id']
class SchoolViewSet(viewsets.ModelViewSet):
queryset = School.objects.filter()
serializer_class = SchoolSerializer
filter_backends = [filters.SearchFilter]
filterset_fields = ['udise', ]
search_fields = ['=udise']
模型看起来像这样
class Teacher(BaseModel):
school = models.ForeignKey(School, on_delete=models.SET_NULL, null=True)
user_id = models.UUIDField()
class School(models.Model):
id = models.AutoField(primary_key=True)
udise = models.IntegerField(unique=True)
学校的连载程序如下
class SchoolSerializer(serializers.ModelSerializer):
class Meta:
model = School
fields = '__all__'
validators = []
如果我把它改成这个(我认为应该像TeacherSet
class SchoolViewSet(viewsets.ModelViewSet):
queryset = School.objects.filter()
serializer_class = SchoolSerializer
filter_backends = [DjangoFilterBackend, SearchFilter]
filterset_fields = ['udise', ]
search_fields = ['=udise']
我面临的问题是
/school/?udise=111
不起作用,也不过滤任何内容/teacher/?user_id=4a031bd9-4c02-4f9a-8c1b-56fb68965021
工作得非常好我想我遗漏了一些非常基本的东西。在数据库中user_id
和udise
都是唯一的。
因此,为了缓解这种情况,我目前正在使用hack-search_fields
和=
在DRF的默认SearchFilter
后端
在
/school/?udise=111
和/teacher/?user_id=4a031bd9-4c02-4f9a-8c1b-56fb68965021
中,您试图进行筛选,而不是搜索搜索url类似于:
/?search=sth
。然后它在search_fields
中的指定字段中搜索,并尝试查找与这些字段匹配的对象。这些字段应该是文本类型,以便能够进行搜索。请参阅有关搜索的文档:https://www.django-rest-framework.org/api-guide/filtering/#searchfilter但是在这里,您正在尝试筛选,因此应该使用
DjangoFilterBackend
或自定义筛选器进行筛选:相关问题 更多 >
编程相关推荐