Django Pass相关对象作为user_passes_test mixin中的变量

2024-05-20 08:36:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将一个对象的实例限制为仅对通过OneToOneField引用的用户可见。我在一个DetailView上使用“user_passes_test”mixin进行比较请求.用户一对一关系中的用户。我得到了一些关于django-irc的帮助,这导致我尝试并实现get_对象失败,但我仍然卡住了(我是django&Python的新手)。在

模型:

class Event(models.Model):     
    client = models.OneToOneField(settings.AUTH_USER_MODEL)

视图:

^{pr2}$

用户在其自己的应用程序中被引用为User(AbstractUser)


Tags: 对象django实例用户testget关系models
2条回答

如果使用的是DetailView,那么可以在视图中实现get_queryset方法:

class EventDetail(DetailView):
    model = Event

    def get_queryset(self):
        queryset = super(DetalView, self).get_queryset()
        return queryset.filter(client=self.request.user)

这将确保Event对象仅限于作为客户端的用户使用。在

我不确定您使用什么URL来访问事件,以及为什么Event和{}之间只有OneToOne关系。但是如果它是一个OneToOne关系,那么这个实现之后的queryset将只包含一个对象。(它可能是您访问此事件所使用的主键,也可能不是)。在

我终于意识到,如果我能把它写出来

def get_queryset(self):
    queryset = super(DetailView, self).get_queryset()
    if self.request.user.is_staff:
        return queryset
    else:
        return queryset.filter(client=self.request.user)

谢谢阿克斯!在

相关问题 更多 >