![](/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.