Max Vallee
Max Vallee

Reputation: 468

Django Rest Framework - Ordering a nested reverse lookup serializer

Is it possible to order/sort a serializer availability that is both a reverse lookup and nested inside unit serializer? For example, I wish to order availability by start_time instead of id.

Below is what I tried but I get .order_by('-start_time')' ^ SyntaxError: invalid syntax

Serializers

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']

Upvotes: 0

Views: 978

Answers (1)

Navid Zarepak
Navid Zarepak

Reputation: 4208

You can override the field and provide the serializer with your own queryset and then return the data:

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

Upvotes: 2

Related Questions