如何计算具有另一个公共值的所有模型对象的总计

时间:2017-08-07 14:42:30

标签: python django django-tables2

尝试在表中创建一个计算列,在该表中,它返回具有匹配user_id的任何db行的所有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')

2 个答案:

答案 0 :(得分:0)

我认为您的总计代码属于表格。通过user_id过滤分配,然后迭代生成的查询集并进行求和。

答案 1 :(得分:0)

我能够使用新功能来解决这个问题。

    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中。我无法让它工作。