2012-12-25 151 views
0

在我看來,我得到了points_total,但它返回的所有點不像points_list,它由當前用戶進行過濾。Django模型:聚合過濾器

問:

1)如何過濾 '高清points_total' 用戶就像在 'points_list'

model.py

class PointsManager(models.Manager): 

    def points_list(self,thisUser): 
     list = Points.objects.filter(user=thisUser) 
     return list 

    def points_total(self,thisUser): 
     return Points.objects.aggregate(models.Sum('points')) 


class Points (models.Model): 

    statusOptions = (
     (0, 'Pending'), 
     (1, 'Added'), 
     (2, 'Deducted'), 
     (3, 'Processing'), 
     ) 

    user = models.ForeignKey(User) 
    points = models.IntegerField(verbose_name=("Points"), default=0) 
    created = models.DateTimeField(("Created at"), auto_now_add=True) 
    updated = models.DateTimeField(verbose_name=("Updated at"), auto_now=True) 
    status = models.IntegerField(default=0, choices=statusOptions) 

    objects = PointsManager() 



    class Meta: 
     verbose_name = ('Point') 
     verbose_name_plural = ('Points') 
+0

你想計算具體爲用戶的點,或者您想用自己的積分總數的所有用戶? –

回答

2

首先我不中你不認爲你需要一個經理來完成你的兩個職能,你可以直接通過查詢自己的模型來實現。

替代計劃point_list功能

points_list = Points.objects.filter(user=request.user) 

替代計劃points_total功能

points = Points.objects.filter(user=request.user) \ 
         .aggregate(total_points=models.Sum('points')) 
+0

你的第二個代碼示例在我的models.py中工作。你能否解釋一下如何通過按照你的建議自行查詢模型來實現它? – Prometheus

+0

我發佈的代碼不使用任何管理器。所以這是我的建議。你必須刪除經理。 –