Django запрашивает данные из моделей и получает сумму полей

Я только начинаю работать с Django, и у меня возник следующий вопрос: Я установил модель, выглядящую как

class Automation_Apps(models.Model):
app_name = models.CharField(max_length=50)
app_description = models.TextField(blank=True)
view_function_name = models.CharField(max_length=50)
time_saver_min = models.IntegerField()
implementation_date = models.DateTimeField(auto_now_add=True)

def __str__(self):
    return self.app_name

class Automation_Usage(models.Model):
used_app = models.ForeignKey(Automation_Apps, on_delete=models.CASCADE)
used_by_user = models.ForeignKey(User, on_delete=models.CASCADE)
used_on_date = models.DateTimeField(auto_now_add=True)

Я хотел бы сделать запрос следующим образом: Select Sum(time_saver_min) from Automation_Apps, Automation_Usage where Automation_Usage.used_app = Automation_Apps.app_name

Я хотел бы сделать это в своем представлении.

Любая помощь будет высоко оценена.

Вы можете использовать Model Sum для суммирования значений вашей модели.

Сделайте это так;

from django.db.models import Sum Тогда

data = Model.objects.aggregate(Sum('time_saver_min'))['time_saver_min__sum'] print(data)

Вы можете использовать аннотацию в Django ORM.

Мое решение:

Sum(time_saver_min) на основе Automation_Usage.used_app = Automation_Apps.app_name

=> queryset = Automation_Usage.objects.values('used_app').annotate(Coalesce(Sum('used_app__time_saver_min'), Value(0)))

=> print(queryset['used_app__time_saver_min__sum'])

Для получения суммы времени, использованного всеми приложениями каждым пользователем:

from django.db.models import Sum
Automation_Usage.objects.values('used_by_user').annotate(time=Sum('used_app__time_saver_min'))

Для получения количества пользователей и суммы использованного времени для каждого приложения:

from django.db.models import Sum, Count
Automation_Usage.objects.values('used_app').annotate(users=Count('used_by_user'), time=Sum('used_app__time_saver_min'))
Вернуться на верх