Необходимо получить общее количество часов, вычисленное из нескольких записей поля "час" в 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