我正在嘗試建立一個頻道。我不希望其他用戶有權訪問詳細視圖。問題是我可以讓一個人可以訪問它,但我不知道如何讓消費者和賣家都可以訪問它?class Group(models.Model): consumer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="", blank=True, null=True) name = models.CharField(max_length=10) seller = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="") ... def __str__(self): return self.name#Detail channel@method_decorator(login_required(login_url='/cooker/login'),name="dispatch")class CheckoutDetail(generic.DetailView): ... def get(self,request,*args,**kwargs): self.object = self.get_object() if self.object.consumer or self.object.seller != request.user: #it's redirect me to home page return HttpResponseRedirect('/') return super(CheckoutDetail, self).get(request,*args,**kwargs)
2 回答

FFIVE
TA貢獻1797條經驗 獲得超6個贊
正確的邏輯是
if not (request.user == self.object.consumer or request.user == self.object.seller):
return redirect(...)
但我會將該邏輯重構為 中的函數object,例如
def has_access(self, user):
return (self.consumer == user or self.seller == user)
然后調用它,例如
if not self.object.has_access(user=request.user):
# ...

哈士奇WWW
TA貢獻1799條經驗 獲得超6個贊
如果我正確理解你的意思,你必須像這樣改變這一行:
if self.object.consumer != request.user and self.object.seller != request.user: return HttpResponseRedirect('/')
添加回答
舉報
0/150
提交
取消