2017-06-14 78 views
1
class User(generics.RetrieveAPIView): 
    serializer_class = RetrieveLocalSerializer 
    queryset = User.objects.filter(
     fields_1=True, 
     fields_2=False 
    ) 

class LocalSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = User 
     fields = ('field_1', 'field_2', 'field_3',) 

该API没有按我的意愿工作。当我尝试获取没有我想要的属性的用户时,仍然返回结果。django - 我如何过滤串行器

我什至试图重写该功能,但它没有工作。

def get_queryset(self): 
    return User.objects.filter(
     is_localguide=True, 
     state=PROFILE_STATE.PUBLISHED 
    ) 

任何帮助表示赞赏。

回答

3

如果我正确理解你的问题,你希望得到你的视图中的实例列表(使用Django Rest Framework)。问题是您的视图继承自generics.RetrieveAPIView。此视图类调用self.retrieve(request, *args, **kwargs)方法,该方法返回一个对象,而不是queryset。我认为你应该从ListAPIView继承你的观点。此类继承ListModelMixin其中

提供一个.list(request,* args,** kwargs)方法,实现列出一个查询集。

所以你的代码将看起来像这样:

class User(generics.ListAPIView): 
    serializer_class = RetrieveLocalSerializer 
    queryset = User.objects.filter(
     fields_1=True, 
     fields_2=False 
    ) 

更多信息请参见http://www.django-rest-framework.org/api-guide/generic-views/#listapiview

您既可以定义查询集视图或重写get_queryset方法:

查询集 - 应该用于从该视图返回对象的查询集。通常,您必须设置此属性,或覆盖get_queryset()方法。如果您重写视图方法,则重要的是调用get_queryset()而不是直接访问此属性,因为queryset将被评估一次,并且这些结果将被缓存用于所有后续请求。

你会发现这里的更多信息:http://www.django-rest-framework.org/api-guide/generic-views/#genericapiview

希望这将帮助)