DRF: Использование параметров URL для определения упорядочивания вложенных полей сериализатора
Мой вопрос заключается в том, существует ли способ использовать фильтры, заданные пользователем в URL, для упорядочивания набора запросов с помощью вложенных сериализаторов, используя вложенные поля.
Например:
class EventsSerializer(serializers.ModelSerializer):
class Meta:
model = Events
fields = ['date', 'location']
class GuestsSerializer(serializers.ModelSerializer):
events = EventsSerializer()
class Meta:
model = Events
fields = ['name', 'phone', 'seat_no', 'events']
class GuestEvents(generics.ListAPIView):
serializer_class = GuestsSerializer
name_param = self.kwargs['name']
order_param = self.request.query_params.get('orderBy')
def get_queryset(self):
data = Guests.objects.select_related('events').filter(name=name_param)
return data
def list(self, request, *args, **kwargs):
res = super(TestData, self).list(request, *args, **kwargs)
res.data = {"guestevents":res.data}
return res
Если у меня есть эти сериализаторы и представление, чтобы показать, какие мероприятия посещает гость, и упорядочивание по умолчанию происходит по возрастанию на основе даты; можно ли заставить пользователя ввести местоположение в качестве orderType и использовать это для упорядочивания или я не могу использовать поле 'location' на данном этапе?
DRF имеет OrderingFilter, который может помочь вам:
filter_backends = [filters.OrderingFilter]
ordering_fields = '__all__'
Объявите это в вашем представлении и укажите поля, по которым вы хотите упорядочить. Затем вы можете сделать это с помощью ?ordering=name и т.д.
Больше информации об этом: https://www.django-rest-framework.org/api-guide/filtering/#orderingfilter