[英]Django Private Channel - if self.object. #(consumer: One or the other: seller# != request.user:
I'm trying to build a channel.我正在尝试建立一个频道。 I don't want the other users have an access to the detail views.我不希望其他用户访问详细视图。 The thing is I can make it accessible to one but I don't know how to make it accessible for both consumer & seller?问题是我可以让一个人访问它,但我不知道如何让消费者和卖家都可以访问它?
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)
The correct logic would be正确的逻辑是
if not (request.user == self.object.consumer or request.user == self.object.seller):
return redirect(...)
but I'd refactor that logic into a function in the object
, eg但我会将该逻辑重构为object
中的object
,例如
def has_access(self, user):
return (self.consumer == user or self.seller == user)
and then call it, eg然后调用它,例如
if not self.object.has_access(user=request.user):
# ...
If I correctly understand you, you must change this line like this:如果我正确理解你,你必须像这样改变这一行:
if self.object.consumer != request.user and self.object.seller != request.user:
return HttpResponseRedirect('/')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.