DRF:使用 URL 参数来确定嵌套序列化程序字段的顺序

DRF: Using URL parameters to determine ordering on nested serializer fields

我的问题是是否有一种方法可以使用用户在 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