Влияние общей суммы на дату начала и дату окончания
Мои взгляды:
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 дней. Это последнее, что я хочу сделать. Можно ли применить фильтр в самом сериализаторе? Буду признателен за любую помощь. Спасибо!!!