![](/img/trans.png)
[英]How to pass Django request object in user_passes_test decorator callable function
[英]Django - Pass related object as variable in user_passes_test mixin
我试图将对象的实例限制为只能由该对象通过OneToOneField引用的用户查看。 我在DetailView上使用“ user_passes_test”混合输入来将request.user与OnetoOne关系中的用户进行比较。 我在django irc上获得了一些帮助,这使我未能成功尝试实现get_object,但是我仍然受困(我是Django&Python的新手)。
该模型:
class Event(models.Model):
client = models.OneToOneField(settings.AUTH_USER_MODEL)
风景:
class EventDetail(UserPassesTestMixin, DetailView):
model = Event
def test_func(self):
if self.request.user == self.model.client:
return True
else:
return False
用户在自己的应用中被引用为User(AbstractUser)
如果使用的是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以及为什么Event
和User
之间只有OneToOne
关系。 但是,如果它是一个OneToOne
关系,则此实现后的queryset
将仅包含一个对象。 (它可能是访问此事件的主键,也可能不是)。
我终于明白了,我认为花了我的力气才意识到我可以在查询集上设置if / else条件,如下所示:
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)
谢谢AKS!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.