[Answered ]-Django Complicated Query

1👍

You need to slightly modify your serializer in order to create a subquery for each object you’re going to serialize.

class TaskHoursSerializer(serializers.ModelSerializer):
    tasks = serializers.SerializerMethodField()

    class Meta:
        model = TaskHours
        exclude = ['task', 'hour']

    def get_tasks(self, obj):
        tasks = TaskHours.objects.filter(name=obj.name, date=obj.date).values_list("task", "hour")
        return list(tasks)

And also, you need to change the queryset in your view in order to not have object duplicates.

class TaskHoursView(generics.ListAPIView):
   serializer_class = TaskHoursSerializer
   queryset = TaskHours.objects.all()
   
   def get_queryset(self):
       start_date = self.request.query_params.get('start_date')
       end_date = self.request.query_params.get('end_date')
       return TaskHours.filter(date__range=[start_date, end_date]).values('name', 'date').distinct()

That should output a field called "tasks" containing each task with the matching hour.

Leave a comment