Как упорядочить по полям сериализатора в 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