Django 模型:始终按用户过滤

问题描述 投票:0回答:2

我如何实现以下目标......

每次在模板中显示点对象时,当前用户都必须对其进行过滤。因此,在模型中我尝试了下面的代码。

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

模型.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()
python django django-models
2个回答
15
投票

您可以使用

确保您的视图拥有用户

@login_required
装饰器

然后您就可以在您的视图中按用户查询积分了

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

或使用反向 FK 查找

request.user.points_set.all()


0
投票

另一种选择是创建一个 mixin:

class OwnershipPermissionMixin(LoginRequiredMixin):

    def get_queryset(self, *args, **kwargs):
        request = args[0] if args else kwargs.get('request') or self.request
        query = super().get_queryset(*args, **kwargs)
        return query.filter(user=request.user)

并使视图(管理或经典)继承它。然后,每次评估查询集时,它将仅过滤拥有的对象。

© www.soinside.com 2019 - 2024. All rights reserved.