Json 仅返回响应中的资助字段(Django Rest SearchFilter)
我有Json 仅返回响应中的资助字段(Django Rest SearchFilter),json,django-rest-framework,django-filter,Json,Django Rest Framework,Django Filter,我有ViewSet,在filter\u后端中有SearchFilter和两个search\u字段。如何返回JSON表示的唯一字段结果? 例如,如果我使用“jo”子字符串发送搜索响应,则此搜索只有一个字段(用户名或全名),而不是每个JSON对象中的用户名和电子邮件: { [{ "username": "jonh"; }, { "fullname": "Jonh"; }, { "username": "j
ViewSet
,在filter\u后端中有SearchFilter
和两个search\u字段。如何返回JSON表示的唯一字段结果?
例如,如果我使用“jo”子字符串发送搜索响应,则此搜索只有一个字段(用户名或全名),而不是每个JSON对象中的用户名和电子邮件:
{
[{
"username": "jonh";
},
{
"fullname": "Jonh";
},
{
"username": "jo";
},
{
"fullname": "Johnson";
}
]
}
viewsets.py:
class UserViewSet(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
queryset = User.objects.all()
permission_classes = (IsUserOrReadOnly,)
filter_backends = (filters.SearchFilter,)
search_fields = ('^username', '^fullname',)
def get_serializer_class(self):
if hasattr(self, 'action') and self.action == 'list':
return UserListSerializer
return UserDetailSerializer
serializers.py:
class UserListSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email', 'fullname')
我将创建一个序列化程序工厂函数,该函数将搜索参数作为参数:
def generate_user_list_serializer(search_terms):
class UserListSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = tuple(search_terms)
return UserListSerializer
然后在您看来,让序列化程序动态生成:
def get_serializer_class(self):
# make sure that the fields are available
validated_params = [p for p in self.query_params if p in Myfields]
return generate_user_list_serializer(self.query_params)