在django rest框架中使用泛型视图创建简单列表API端点的一种简单方法

在django rest框架中使用泛型视图创建简单列表API端点的一种简单方法,django,serialization,django-rest-framework,Django,Serialization,Django Rest Framework,我想在我的站点上通过ajax自动完成用户名,因此我想要一个API端点,该端点只返回一个简单的数组和字符串,如: [ "john", "doe", "cool_rick123", ... ] …具有可选筛选功能 现在,我可以想出一些笨拙的方法来实现这一点,但是在django rest框架中使用泛型视图的最佳实践干式方法是什么呢?我可以使用ListAPIView,但这会将其序列化为列表中的对象,而不仅仅是我所知道的列表中的名称字符串。假设您有一个属性为username的用户模型,并

我想在我的站点上通过ajax自动完成用户名,因此我想要一个API端点,该端点只返回一个简单的数组和字符串,如:

[
  "john",
  "doe",
  "cool_rick123",
  ...
]
…具有可选筛选功能


现在,我可以想出一些笨拙的方法来实现这一点,但是在django rest框架中使用泛型视图的最佳实践干式方法是什么呢?我可以使用ListAPIView,但这会将其序列化为列表中的对象,而不仅仅是我所知道的列表中的名称字符串。

假设您有一个属性为username的用户模型,并且希望自动完成该模型

序列化程序.py viewsets.py 您的url模式可能类似于/users/autocomplete/?username=(username)

这里用户名是可选的。如果您不将username作为get参数传递,它仍将返回所有用户名的列表

您知道您需要仅包含用户名的平坦版本吗?我只会将用户实例作为整体对象提供,并在您实际发现这是一个UI性能问题时进行优化。
class UserSerializer(serializers.ModelSerializer):

    class Meta:
         model = User
         fields = ('username')
class UserAutocompleteApi(viewsets.ModelViewSet):
    serializer_class = UserSerializer

    def get_queryset(self):
        user_query = self.request.query_param.get('username')
        queryset = User.objects.filter(username__icontains='')
        return queryset