class CalendarSourceAPIView(generics.ListAPIView):
serializer_class = CalendarSerializer
def get_queryset(self):
job_id = self.kwargs['pk']
filter = self.request.query_params.get('filter', None)
objects = JobLog.objects.filter(job__user=self.request.user, job__id=job_id)
start = self.request.query_params.get('start')
end = self.request.query_params.get('end')
if filter is not None:
if filter == 'win':
objects = objects.filter(state=JobLog.WON, created_at__range=(start_date, end_date))
if filter == 'lost':
objects = objects.filter(state=JobLog.LOST, created_at__range=(start_date, end_date))
if filter == 'count_won':
today = datetime.datetime.now()
response_data = []
for date in daterange(start_date, end_date):
if objects.start_date.date() <= date <= today.date():
count_won_days = objects.won_days_in_period(objects.start_date.date(),
date + datetime.timedelta(days=1))
response_data.append({'start': date.isoformat(), 'title': 'won days :' + str(count_won_days)})
return response_data
return objects
як мені у випадку filter == 'count_won' не направляти дані на серіалізацію, а одразу видати на клієнта ( return response_data) ?
вони вже в готовому форматі.
другий варіант - написати для filter == 'count_won' окремий серіалізатор i перевизначати його через get_serializer_class, який пропускатиме дані транзитом.
третій варіант - в існуючому CalendarSerializer робити серіалізацію в залежності від значення filter
Що каже best practice ? Як правильніше і коректніше?