gpt4 book ai didi

python - Django - 在 user_passes_test 混合中将相关对象作为变量传递

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:46 25 4
gpt4 key购买 nike

我正在尝试限制一个对象的实例,使其仅对该对象通过 OneToOneField 引用的用户可见。我在 DetailView 上使用“user_passes_test”mixin 将 request.user 与 OnetoOne 关系中的用户进行比较。我在 django irc 上得到了一些帮助,这导致我尝试和实现 get_object 失败,但我仍然卡住了(我是 Django 和 Python 的新手)。

模型:

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

View :

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,那么您可以在 View 中实现 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 访问事件以及为什么 EventUser 之间只有 OneToOne 关系。但如果它是一个OneToOne 关系,那么这个实现之后的queryset 将只包含一个对象。 (它可能是也可能不是您访问此事件所使用的主键)。

关于python - Django - 在 user_passes_test 混合中将相关对象作为变量传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41636593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com