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没有按照我的意愿运作。当我尝试获得没有我想要的属性的用户时,它仍然返回结果。
我甚至尝试覆盖该功能,但它也没有用。
def get_queryset(self):
return User.objects.filter(
is_localguide=True,
state=PROFILE_STATE.PUBLISHED
)
感谢任何帮助。
答案 0 :(得分:3)
如果我正确理解了您的问题,您希望获得视图中的实例列表(使用Django Rest Framework)。问题是您的视图是从generics.RetrieveAPIView
继承的。此视图类调用self.retrieve(request, *args, **kwargs)
方法,该方法返回一个对象,而不是查询集。我认为你应该从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
方法:
queryset - 应该用于从此视图返回对象的查询集。通常,您必须设置此属性,或覆盖get_queryset()方法。如果要覆盖视图方法,则必须调用get_queryset()而不是直接访问此属性,因为queryset将被评估一次,并且将为所有后续请求缓存这些结果。
您可以在此处找到更多信息:http://www.django-rest-framework.org/api-guide/generic-views/#genericapiview
希望这会有所帮助)