0

私の見解では、points_total を取得しますが、現在のユーザーでフィルタリングする points_list とは異なり、すべてのポイントを返します。

質問:

1)「points_list」のようにユーザーごとに「def points_total」をフィルタリングするにはどうすればよいですか

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')
4

1 に答える 1

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'))
于 2012-12-25T12:07:06.417 に答える