Действительно не уверен, что я сделал здесь неправильно, за исключением нескольких деталей, он очень похож на оба примера на веб-сайте REST Framework и почти точную копию другого моего 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()
...
Если у кого-то есть какие-либо указатели, я бы с радостью согласился.
NB. standardised_json_response()
- это просто оболочка, которая принимает несколько переменных и возвращает объект dict (), просто внедряя некоторые дополнительные мета, такие как отметка времени запроса и статус успеха (True / False)