如何计算具有另一个公共值的所有模型对象的总数
How to calculate total for all model objects that have another common value
尝试在 table 中创建计算列,其中 returns 具有匹配 user_id 的任何数据库行的所有 allocated_hours 的总和。目前我在每个项目的列中得到“0”。我在这里错过了什么?感谢您的帮助。
注意我用的是django tables2.
#model.py
class Allocation(models.Model):
user_id = models.ForeignKey(Resource)
project_id = models.ForeignKey(Project)
week = models.DateField(default=timezone.now)
allocated_hours = models.IntegerField(default=0)
actual_hours = models.IntegerField(default=0)
def __str__(self):
return '%s - %s' % (self.user_id, self.project_id)
def allocation_total(self):
alltotal = 0
for i in Allocation.objects.values_list('user_id'):
if i == Allocation.user_id:
alltotal += Allocation.allocated_hours
return alltotal
-
#tables.py
class Project_Resource_table(tables.Table):
role = tables.Column(accessor='user_id.resource_type')
name = tables.Column(accessor='user_id.resource_name')
allocation = tables.Column(accessor='allocation_total')
class Meta:
model = Allocation
exclude = ('id', 'user_id', 'project_id', 'week', 'allocated_hours', 'actual_hours')
sequence = ('role', 'name', 'allocation')
我认为您的总计代码属于 table。按 user_id 过滤分配,然后遍历生成的查询集并求和。
我能够使用新功能解决该问题。
def total_allocation(self):
a = Allocation.objects.filter(project_id=self.project_id)
total = 0
for i in a:
if i.user_id == self.user_id:
total += i.allocated_hours
return total
感谢您的建议。仍然好奇我是否有办法在 tables.py 中执行此操作而不是将其添加到我的 models.py。我无法让它工作。
尝试在 table 中创建计算列,其中 returns 具有匹配 user_id 的任何数据库行的所有 allocated_hours 的总和。目前我在每个项目的列中得到“0”。我在这里错过了什么?感谢您的帮助。
注意我用的是django tables2.
#model.py
class Allocation(models.Model):
user_id = models.ForeignKey(Resource)
project_id = models.ForeignKey(Project)
week = models.DateField(default=timezone.now)
allocated_hours = models.IntegerField(default=0)
actual_hours = models.IntegerField(default=0)
def __str__(self):
return '%s - %s' % (self.user_id, self.project_id)
def allocation_total(self):
alltotal = 0
for i in Allocation.objects.values_list('user_id'):
if i == Allocation.user_id:
alltotal += Allocation.allocated_hours
return alltotal
-
#tables.py
class Project_Resource_table(tables.Table):
role = tables.Column(accessor='user_id.resource_type')
name = tables.Column(accessor='user_id.resource_name')
allocation = tables.Column(accessor='allocation_total')
class Meta:
model = Allocation
exclude = ('id', 'user_id', 'project_id', 'week', 'allocated_hours', 'actual_hours')
sequence = ('role', 'name', 'allocation')
我认为您的总计代码属于 table。按 user_id 过滤分配,然后遍历生成的查询集并求和。
我能够使用新功能解决该问题。
def total_allocation(self):
a = Allocation.objects.filter(project_id=self.project_id)
total = 0
for i in a:
if i.user_id == self.user_id:
total += i.allocated_hours
return total
感谢您的建议。仍然好奇我是否有办法在 tables.py 中执行此操作而不是将其添加到我的 models.py。我无法让它工作。