Reputation: 370
Thanks for your help
I got a question :
I want to make accessible only for two type of people: admin (ForeignKey) and friends (ManyToMany). All belongs to the same model.
The issue is user who belongs to friends
are redirected to '/' and can not see the page
self.object.user -> user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
self.object.friends -> friends = models.ManyToManyField(User,blank=True,related_name='friends_reservation')
def get(self,request,*args,**kwargs):
self.object = self.get_object()
if not (request.user == self.object.user or request.user == self.object.friends):
return HttpResponseRedirect('/')
Edit :
def get(self,request,*args,**kwargs):
self.object = self.get_object()
if not (request.user == self.object.user or request.user in self.object.friends):
return HttpResponseRedirect('/')
issue:
argument of type 'ManyRelatedManager' is not iterable
Upvotes: 0
Views: 42
Reputation: 192
Make a change :)
def get(self,request,*args,**kwargs):
self.object = self.get_object()
if not (request.user == self.object.user or request.user in self.object.friends.all()):
return HttpResponseRedirect('/')
Upvotes: 1
Reputation: 501
You should check if the user is within the current friends
instance.
But you should see if what you have in self.object.friends
is a queryset or not. Querysets are collections, so you can use in
to check if an item belongs to it. Also, just to be careful, let's remove those parens:
def get(self,request,*args,**kwargs):
self.object = self.get_object()
if not request.user == self.object.user or request.user not in self.object.friends:
return HttpResponseRedirect('/')
Upvotes: 1