Reputation: 468
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
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
Upvotes: 2