Django - Убедитесь, что порядок данных ответа более новый первый
Ниже приведен код, который возвращает сообщения, более новые, чем сообщение с указанным post_uuid
. Это обеспечивается тем, что я принудительно использую схему упорядоченных uuid, где каждому Post
присваивается uuid в порядке создания, это делается с помощью ulid. Я хочу добиться того, чтобы возвращаемые serializer.data
были упорядочены по данным о создании Post
, причем самый новый был первым или индекс=0, а самый старый - последним. Как мне это обеспечить?
view.py
def query_to_full_post_data_serializer(request, post_query_set: QuerySet):
query_set_annotated = post_query_set.annotate(
creator_username=F('creator__username'),
creator_avatar_url=F('creator__avatar')
)
return FullPostDataSerializer(query_set_annotated, many=True)
@api_view(['GET'])
def get_newer_posts(request, post_uuid, count):
query = generate_followee_or_join_goal_follow_query(request)
query = query & Q(uuid__gt=post_uuid)
serializer = query_to_full_post_data_serializer(request=request, post_query_set=Post.objects.filter(query).order_by('uuid')[:count])
return Response(serializer.data, status=status.HTTP_200_OK)
serializer.py
class FullPostDataSerializer(serializers.ModelSerializer):
creator_username = serializers.SlugField()
creator_avatar_url = serializers.SlugField()
class Meta:
model = Post
fields = (
'body', 'created', 'creator_username', 'uuid', 'creator', 'creator_avatar_url')
Опробованные решения
-
serializer.data.reverse()
по какой-то причине не разворачивает список.
- попытался
order_by
на срезе, но это не разрешено Django .
serializer.data
является свойством, поэтому вызов .reverse()
на нем, не сработает, так как вы отменяете результат свойства, но следующий вызов serializer.data
снова вызовет свойство, которое построит новый список.
Таким образом, вы получаете данные, а затем обращаете их и передаете как результат:
items = serializer.data
items.reverse()
return Response(items, status=status.HTTP_200_OK)