Как упорядочить по полям сериализатора в django?

Здесь я упорядочиваю данные списка ответов на основе полученного значения из SerializerMethodField, но при таком подходе мой api отвечает очень медленно, около 14-15 секунд, но без использования этой сортировки и с использованием только queryset время ответа составляет около 12-1300 мс, поэтому как я могу оптимизировать этот код?

Я думаю, что использование queryset.order_by будет быстрее, чем сортировка из списка, но Как я могу использовать order_by здесь, поскольку мне нужно упорядочить по значению поля serializermethodfield.

Есть ли какие-либо другие способы оптимизации производительности здесь?

# serializer

class MySerializer(serializers.ModelSerializer):  
    duration = serializers.SerializerMethodField()

    def get_duration(self, obj):   
        dt1 = obj.files.filter(type="1").first().approved_on
        dt2 = timezone.now() 
        days = (dt2-dt1).days
        return days

# views

@api_view("GET"):
def get_list_of_items(self, request): 
   limit = int(request.GET.get('limit', 30))
   offset = int(request.GET.get('off', 0))
   max = limit + offset
   qs = MyModel.objects.filter(user=request.user, status="DONE").prefetch_related("files")
   serializer = MySerializer(qs, many=True)
   sorted_ls = sorted(serializer.data, key=lambda k: k['duration'])[offset:max]
   return Response{'data':sorted_ls}

вы можете проверить это и применить в своей программе.

players = SerializerMethodField(method_name=players_related_to_team)

def get_players_related_to_team(self, instance): players = instance.players.order_by('title') return PlayerSerializer(players, many=True).data

Вернуться на верх