2017-08-07 8 views
0

テーブルに計算列を作成しようとすると、一致する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') 
+0

あなたは 'allocation_total'の定義で' Allocation.'の代わりに 'self.'を使ってみるべきです –

+0

これは意味がありますが、私はこのコードを使用すると0よりむしろ最後になります: def allocation_total : alltotal = 0 for i in self.objects.values_list( 'user_id'): if i == self.user_id: alltotal + = self.allocated_hours リターンalltotal – jonin

答えて

0

私はあなたの合計コードがテーブルに属していると思います。 user_idによるFilter Allocationを実行し、結果のクエリーセットを反復処理して合計します。

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 

ありがとうございます。それが私のmodels.pyに追加するのではなく、tables.pyでこれを行う方法があるかどうか不思議です。私はそれを働かせることができませんでした。

関連する問題