我正在尝试限制一个对象的实例,使其仅对该对象通过 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 访问事件以及为什么 Event 和 User 之间只有 OneToOne 关系。但如果它是一个OneToOne 关系,那么这个实现之后的queryset 将只包含一个对象。 (它可能是也可能不是您访问此事件所使用的主键)。
