Django Rest Framework - Заказ вложенного сериализатора обратного просмотра - PullRequest
0 голосов
/ 09 января 2020

Можно ли заказать / отсортировать сериализатор availability, который является как обратным поиском, так и вложенным в unit сериализатор? Например, я буду sh заказывать availability на start_time вместо id.

Ниже я попробовал, но получаю .order_by('-start_time')' ^ SyntaxError: invalid syntax

Сериализаторы

class AvailabilitySerializer(serializers.ModelSerializer):
    staff = StaffSerializer() 

    class Meta:
        model = Availability
        fields = ['id','start_time', 'end_time','staff']

class ManagerSerializer(serializers.ModelSerializer):

    class Meta:
        model = Manager
        fields = ['company', 'logo']

class UnitSerializer(serializers.ModelSerializer):
    availability = AvailabilitySerializer(source='availability_set.order_by('-start_time')', many=True)
    manager = ManagerSerializer()


    class Meta:
        model = Unit
        fields = ['id', 'address', 'manager', 'availability']

1 Ответ

1 голос
/ 09 января 2020

Вы можете переопределить поле и предоставить сериализатору свой собственный набор запросов, а затем вернуть данные:

from rest_framework.serializers import SerializerMethodField


class UnitSerializer(serializers.ModelSerializer):
    availability = SerializerMethodField()
    manager = ManagerSerializer()

    class Meta:
        model = Unit
        fields = ['id', 'address', 'manager', 'availability']

    def get_availability(self, instance):
        queryset = instance.availability_set.order_by('-start_time')
        return AvailabilitySerializer(queryset, many=True).data

SerializerMethodField

...