Необходимо получить общее количество часов, вычисленное из нескольких записей поля "час" в django rest framework

сериализаторы

class Consolidated_serializers(serializers.ModelSerializer):

    project_name = serializers.CharField(source='project.project_name')
    username = serializers.CharField(source='user.username')
    user_id = serializers.CharField(source='user.id')

    class Meta:
        model = Timelog
        fields = ('id','username','user_id','project_name','date','hours',)

viewset

class Total_hours_viewset(viewsets.ModelViewSet):

    queryset = models.Timelog.objects.all().annotate(sum_delta=Sum('hours'))
    serializer_class=serializers.Consolidated_serializers

результат, который я получаю

[
    {
        "id": 13,
        "username": "vinoth",
        "user_id": "14",
        "project_name": "Inhouse Timesheet",
        "date": "2022-03-24",
        "hours": "08:00:00"
    },
    {
        "id": 14,
        "username": "vinoth",
        "user_id": "14",
        "project_name": "Inhouse Timesheet",
        "date": "2022-03-24",
        "hours": "08:00:00"
    }
]

Но результат, который мне нужен, таков

[
    Total hours: 16:00:00
    {
        "id": 13,
        "username": "vinoth",
        "user_id": "14",
        "project_name": "Inhouse Timesheet",
        "date": "2022-03-24",
        "hours": "08:00:00"
    },
    {
        "id": 14,
        "username": "vinoth",
        "user_id": "14",
        "project_name": "Inhouse Timesheet",
        "date": "2022-03-24",
        "hours": "08:00:00"
    }
]

Я пытался использовать приведенный выше код, но не смог получить общее количество часов в json представлении для нескольких записей. Не могли бы вы помочь мне получить общее количество часов, добавив несколько записей поля hour в модель.

Можете попробовать это,

class Consolidated_list_serializers(serializers.ListSerializer):
    def to_representation(self, instance):
        hours = instance.aggregate(hours=models.Sum(models.F('hours')))
        ret = super().to_representation(instance)
        ret.append(hours.get('hours'))
        return ret 

class Consolidated_serializers(serializers.ModelSerializer):

    project_name = serializers.CharField(source='project.project_name')
    username = serializers.CharField(source='user.username')
    user_id = serializers.CharField(source='user.id')

    class Meta:
        list_serializer_class = Consolidated_list_serializers
        model = Timelog
        fields = ('id','username','user_id','project_name','date','hours',)


class Total_hours_viewset(viewsets.ModelViewSet):

    queryset = models.Timelog.objects.all()
    serializer_class=serializers.Consolidated_serializers
Вернуться на верх