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)