#python #django
#python #django
Вопрос:
Я пытаюсь создать канал. Я не хочу, чтобы другие пользователи имели доступ к подробным представлениям. Дело в том, что я могу сделать его доступным для одного, но я не знаю, как сделать его доступным как для потребителя, так и для продавца?
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)
Ответ №1:
Правильная логика была бы
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):
# ...
Комментарии:
1. Спасибо 🙂 вы прекрасно поняли, что мне было нужно
Ответ №2:
Если я правильно вас понимаю, вы должны изменить эту строку следующим образом:
if self.object.consumer != request.user and self.object.seller != request.user:
return HttpResponseRedirect('/')
Комментарии:
1. извините, я не совсем ясно выразился. Предположим, что я потребитель, и я создаю канал с одним пользователем (например, x), продавцом. Я хочу, чтобы x и я имели доступ к этому каналу.
2. с вашим кодом, поскольку я потребитель, я не могу получить к нему доступ 🙂 это должно быть одно или другое
3. Нет проблем 🙂 Я застрял, чтобы понять вас еще больше 🙂 Извините за мой плохой английский, может быть, я не могу понять суть проблемы: ( вы хотите, если все исправить, вы не хотите возвращать HttpResponseRedirect(‘/’) ? это правда ?