Django 从模型中查询数据并获取字段总和
Django querying data out of models and get sum of field
我刚开始使用 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
这样做的目的如下:
Automation_App
将有应用程序和一个字段,使用此应用程序将节省多少时间
Automation_Usage
将有记录,当用户使用该应用程序时。
通过我的查询,我想了解应用程序的使用频率以及使用它节省了多少时间(来自 Automation_App
)。
我想这样做。
您可以使用模型总和来对模型的值求和。
这样做;
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)))
=> 打印(查询集['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'))
我刚开始使用 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
这样做的目的如下:
Automation_App
将有应用程序和一个字段,使用此应用程序将节省多少时间
Automation_Usage
将有记录,当用户使用该应用程序时。
通过我的查询,我想了解应用程序的使用频率以及使用它节省了多少时间(来自 Automation_App
)。
我想这样做。
您可以使用模型总和来对模型的值求和。
这样做;
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)))
=> 打印(查询集['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'))