gpt4 book ai didi

django - 如何统计 Django 中数据库表的所有对象?

转载 作者:行者123 更新时间:2023-12-05 02:15:25 26 4
gpt4 key购买 nike

我有一个如下模型,我想使用 Django 2.0.4 过滤表 Work 中的用户的所有 work_times,在此先感谢您的任何建议。

class Work(models.Model):
name = models.CharField(max_length=800)
date = models.DateField(auto_now=False, null=True, blank=True)
time = models.TimeField(auto_now=False, null=True, blank=True)
work_times = models.FloatField(default=1, verbose_name="work times(hours)")
user = models.ManyToManyField(User, related_name="works", blank=True)

最佳答案

您可以通过以下方式获得所有这些:

all_work = Work.objects.filter(user=sample_user)

如果您想知道该查询中的行数,您可以使用:

all_work_count = Work.objects.filter(user=sample_user).count()

您可以通过以下方式访问该查询的每个项目:

for each_work in all_work:
print(each_work.work_times)

编辑

通过获取用户的所有作品,您可以从作品实例中访问个人的work_time。但是,您也可以通过这种方式访问​​工作时间:

all_work = Work.objects.filter(user=sample_user).values('work_times')

这只会给你工作时间。但这样一来,你就无法知道哪个工作时间属于哪个工作。

编辑2
要获得工作的总时间,您有两个选择,一个简单,一个稍微复杂一些:

简单的

这是技术上简单的解决方案,但仅适用于非常小的查询大小。
all_works = Work.objects.filter(user=sample_user)
total_work = 0
for work in all_works:
total_work += work.work_times

复杂的

虽然这个效率更高并且在一行中,但您可能需要稍微尝试一下才能正确使用它。

from django.db.models import Sum

total_works = Work.objects.filter(user=sample_user).aggregate(Sum("work_times"))

关于django - 如何统计 Django 中数据库表的所有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51832933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com