如何在 Django 中计算数据库 Table 的所有对象?
How to Count All Objects of a Database Table in Django?
我有一个模型如下,我想用 Django 2.0.4 在 Table Work
中过滤一个 user's all 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。但是,您也可以通过这种方式访问 work_time:
all_work = Work.objects.filter(user=sample_user).values('work_times')
这只会给你 work_times。但是这样一来,你就无法知道work_time属于哪个作品了。
编辑 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"))
如果您只想包括 work_times 不同于 1...
的那些,您可以这样计算它们
count = User.objects.filter(work__gt=1).count()
或者这种方式也包括那些 work_times 等于 1...
count = User.objects.filter(work__gt=1).count()
并从所有具有用户的工作对象中获取查询集...
all_works = Work.objects.filter(user__isnull=False)
您也可以通过添加 .count() 来从上次查询中计算它们。
count=User.objects.filter(用户名='username').first().work_set.all().count()
我有一个模型如下,我想用 Django 2.0.4 在 Table Work
中过滤一个 user's all 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。但是,您也可以通过这种方式访问 work_time:
all_work = Work.objects.filter(user=sample_user).values('work_times')
这只会给你 work_times。但是这样一来,你就无法知道work_time属于哪个作品了。
编辑 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"))
如果您只想包括 work_times 不同于 1...
的那些,您可以这样计算它们count = User.objects.filter(work__gt=1).count()
或者这种方式也包括那些 work_times 等于 1...
count = User.objects.filter(work__gt=1).count()
并从所有具有用户的工作对象中获取查询集...
all_works = Work.objects.filter(user__isnull=False)
您也可以通过添加 .count() 来从上次查询中计算它们。
count=User.objects.filter(用户名='username').first().work_set.all().count()