【发布时间】:2020-08-12 01:36:35
【问题描述】:
真的不确定我在这里做错了什么,减去一些细节,它与 REST 框架网站上的两个示例非常相似,几乎是我拥有的另一个 Viewset 的抄本。
class ArtistViewSet(
mixins.ListModelMixin,
mixins.RetrieveModelMixin,
viewsets.GenericViewSet,
ArtistSetPagination
):
queryset = Profile.objects.all()
permission_classes = [permissions.AllowAny,]
pagination_class = ArtistSetPagination
serializer_class = ProfileSerializer
def get_queryset(self, *args, **kwargs):
return Profile.objects.all().prefetch_related(
'user'
)
# Artwork List & List Filtering API View:
def list(self, request, *args, **kwargs):
parameters = {key: request.GET.get(key) for key in dict(request.GET).keys()}
queryset = self.get_queryset().annotate(
first_name_len=Length('user__first_name'),
last_name_len=Length('user__last_name')
).filter(
first_name_len__gt=0,
last_name_len__gt=0,
).filter(
**parameters
).order_by(
'-created'
)
page = self.paginate_queryset(queryset, self.request)
if page is not None:
serializer = ProfileSerializer(page, context={'request': request}, many=True)
data = paginated.data
paginated = self.get_paginated_response(data)
else:
serializer = ProfileSerializer(queryset, context={'request': request}, many=True)
data = serializer.data
response = standardized_json_response(
message='Artist Objects Has Been Successfully Listed',
timestamp=datetime.datetime.now(),
data=data
)
return Response(data=response, status=status.HTTP_200_OK)
我所看到的不同之处在于 Length() 的注释的使用...
如果有人有任何建议,我很乐意接受。
注意standardised_json_response() 只是一个包装器,它接受一些变量并返回一个 dict() 对象,只是注入一些额外的元数据,例如请求的时间戳和成功状态(真/假)
【问题讨论】:
标签: django django-rest-framework pagination