Влияние общей суммы на дату начала и дату окончания

Мои взгляды:

class CentreRevenue(ListAPIView):
permission_classes = [IsAuthenticated, ]
pagination_class = CustomPagination
serializer_class = serializers.CentreRevenueSerializer

def get_queryset(self):
    self.pagination_class.page_size = page_size
    id = self.request.query_params.get("id")
    start_date = self.request.query_params.get("start_date")
    end_date = self.request.query_params.get("end_date")
    data = center_models.Centers.objects.filter(center_type__in=['collection_center', 'direct_client'], id__isnull=False)

    if id:
        data = data.filter(id=id)

    # if start_date and end_date:
    #     data = data.filter(created_at__date__range=[start_date, end_date])
        
    return data

#Serializer

class CentreRevenueSerializer(serializers.BaseSerializer):
class Meta:
    model = package_models.CollectionCenterLedger

def to_representation(self, instance):
    tbc = booking_models.Booking.objects.filter(center=instance, center__isnull=False).values_list('id').count()
    
    amount = sum(
        package_models.CollectionCenterLedger.objects.filter(
            package__isnull=False,
            center=instance,
            ledger_type='debit' if instance.type == 'prepaid' else 'credit'
            ).values_list('amount', flat=True)
        )
    remove_test_billing_client_billing = sum(
        package_models.CollectionCenterLedger.objects.filter(
            package__isnull=False,
            ledger_type='credit' if instance.type == 'prepaid' else 'debit',
            center=instance,
            ).values_list('amount', flat=True)
    )

    add_test_billing = sum(
        package_models.CollectionCenterLedger.objects.filter(
            package__isnull=False,
            ledger_type='debit' if instance.type == 'prepaid' else 'credit',center=instance
            ).values_list('rcl_share', flat=True)
    )
    remove_test_billing = sum(
        package_models.CollectionCenterLedger.objects.filter(
            package__isnull=False,
            ledger_type='credit' if instance.type == 'prepaid' else 'debit',
            center=instance
            ).values_list('rcl_share', flat=True)
    )
   
    rcl_amount = add_test_billing - remove_test_billing
    
    amount = amount - remove_test_billing_client_billing
    return{
        'ccdc_name':instance.name,
        'sales_person':instance.sales_manager.user.username if instance.sales_manager else None,
        'centre_type':instance.center_type,
        'total_booking_count':tbc,
        # 'total_revenue':sum([i for i in total_rev if i is not None]),
        'total_revenue':amount,
        'rcl_share':rcl_amount
    }

Здесь я вычисляю total_booking_count, total_revenue и rcl_share. Я хочу отфильтровать эти данные с помощью дат начала_даты и конца_даты и, соответственно, повлиять на эти расчеты. Допустим, если я выберу диапазон дат 5 дней, то будет показан расчет только этих 5 дней. Это последнее, что я хочу сделать. Можно ли применить фильтр в самом сериализаторе? Буду признателен за любую помощь. Спасибо!!!

Вернуться на верх