Django Private Channel-if self.object.#(consumer:一个或另一个:sell



我正在尝试构建一个通道。我不希望其他用户能够访问详细信息视图。问题是我可以让一个人访问它,但我不知道如何让消费者和消费者都可以访问它;卖者

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)

正确的逻辑应该是

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):
# ...

如果我正确理解你,你必须这样更改这行:

if self.object.consumer != request.user and self.object.seller != request.user:
return HttpResponseRedirect('/')   

最新更新