简体   繁体   English

Django 私人频道 - 如果 self.object。 #(消费者:一个或另一个:卖家#!= request.user:

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM