簡體   English   中英

Django-將相關對象作為變量傳遞給user_passes_test mixin

[英]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以及為什么EventUser之間只有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM