Adding extra data to Django Rest Framework results for entire result set

后端 未结 4 1335
刺人心
刺人心 2020-12-14 15:42

I\'m using Django Rest Framework and need to add extra data to a result set. Specifically, where you would usually have:

{
    \"count\": 45, 
    \"next\":          


        
4条回答
  •  旧时难觅i
    2020-12-14 15:49

    In the end I just created a custom pagination serializer with a field like so:

    class DistanceCountField(serializers.Field):
        def to_native(self, value):
            try:
                distance_counts = {
                    '1_mile': self._count_lte_miles(value, 1),
                    '5_mile': self._count_lte_miles(value, 5),
                    '10_mile': self._count_lte_miles(value, 10),
                    '20_mile': self._count_lte_miles(value, 20),
                }
            except FieldError:
                distance_counts = None
    
            return distance_counts
    
        def _count_lte_miles(self, value, miles):
            meters = miles * 1609.344
            return value.filter(distance__lte=meters).count()
    
    
    class PaginatedCountSerializer(pagination.PaginationSerializer):
        distance_counts = DistanceCountField(source='paginator.object_list')
    
        class Meta:
            # Class omitted, just a standard model serializer
            object_serializer_class = MyModelSerializer 
    

    I also added a distance annotation to each object in the queryset for the filtering to work on.

提交回复
热议问题