0

当我列出点时,我想为用户添加所有点。在我的模板中,我只想调用类似“points.total_points”的名称。以下是我到目前为止所拥有的,如果可能的话,我想将这一切都保留在我的模型中。有人可以帮助解释如何实现这一目标吗?

谢谢

模型.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')

视图.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.RequestMiddlewareMIDDLEWARE_CLASSES

这样您就可以编写request.user访问用户模型

2)在用户模型中添加total_points方法(可以通过多种方式完成,contribute_to_class或者列举UserProfile其中两种)

这样您就可以request.user.total_points在模板中编写

3)缓存total_points以避免每次查看页面时数据库命中:

    3a)要么使用标准的django缓存框架,

或者如果您希望显示的值在数据库中更改后立即更改,

Point3b)当通过 django 信号创建/修改/删除    新实例时手动更新值

于 2012-12-25T11:00:20.537 回答