Django模型:始终由用户过滤

Pro*_*eus 8 python django django-models

我如何实现以下....

每次点对象显示在模板中时,它必须始终由当前用户过滤.所以,在模型中我尝试了下面的代码.

这可能吗?我怎样才能实现上述目标?

Models.py

from django.db import models
from django.contrib.auth.models import User


POINTS_PENDING, POINTS_ADDED, POINTS_DEDUCTED, ORDER_PROCESSING = range(4)
STATUS_OPTIONS = (
    (POINTS_PENDING, ('Pending')),
    (POINTS_ADDED, ('Added')),
    (POINTS_DEDUCTED, ('Deducted')),
    (ORDER_PROCESSING, ('Processing')),
    )


class PointsManager(models.Manager):

    def points_list(self,User):
        list = Points.objects.filter(points_user=User).exclude(status=ORDER_PROCESSING)
        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()
Run Code Online (Sandbox Code Playgroud)

dm0*_*514 14

您可以通过使用确保您的视图拥有用户

@login_required 装饰

那么您可以在视图中按用户查询点数

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

或使用反向FK查找

request.user.points_set.all()

  • 不太聪明。我认为答案是,这是否可以在一个集中的地方始终自动完成。你的解决方案有缺点:1)如果过滤条件更复杂怎么办?2)如何使其在管理页面内工作?3) 如果您在 20 个视图中重复此操作,您确定还记得在第 21 个视图中添加了 id 吗?- 所以我在这里没有找到很多帮助.. (3认同)