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