0

ポイントをリストするとき、ユーザーのすべてのポイントを合計したいと思います。私のテンプレートでは、'points.total_points' のようなものを呼び出したいと思います。以下は私がこれまでに持っているものです。可能であれば、これをすべてモデルに保持したいと思います。誰かがこれを達成する方法を説明できますか?

ありがとう

model.py

class PointsManager(models.Manager):

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


class Points (models.Model):
    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)

    objects = PointsManager()



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

view.py

@login_required
def history(request):

    thisPoints = Points.objects.points_list(request.user)
    context = {'points':thisPoints}
    return render_to_response('points/history.html', context, context_instance=RequestContext(request))
4

1 に答える 1

3

実行できることがいくつかあります。

1) テンプレートでリクエストを利用可能にする:

common.core.middleware.RequestMiddlewareに追加MIDDLEWARE_CLASSES

request.userUser モデルにアクセスするように書くことができるように

2)total_pointsメソッドをUserモデルに追加します(さまざまな方法で実行できますが、そのうちの2contribute_to_classUserProfileに名前を付けることができます)

request.user.total_pointsテンプレに書き込めるように

total_points3)ページが表示されるたびにデータベースにヒットしないようにキャッシュします。

    3a) 標準の django キャッシング フレームワークを使用するか、

または、データベースで値が変更された直後に表示値を変更する場合は、

Point3b) django シグナルを介し    て新しいインスタンスが作成/変更/削除されたときに値を手動で更新する

于 2012-12-25T11:00:20.537 に答える