Reputation: 51
I'm a Django beginner, how do I allow only my friends, people who follow me (from_user) and people I follow (to_user) to see my post. I tried this but I'm not getting any results.
def home(request):
friends_posts=[]
if request.user.is_authenticated:
posts=Image.object.exclude(imageuploader_profile=request.user)
for p in posts:
if p.imageuploader_profile in request.user.friends.all():
friends_posts.append(p)
context={'friends_posts':friends_post}
return render(request, 'home.html', context)
Models.py
class Profile(models.Model):
user=models.OneToOneField(settings.AUTH_USER_MODEL)
friends=models.ManyToManyField('Profile' related_name='my_friends')
class FriendRequest(models.Model):
to_user=models.ForeignKey(settings.AUTH_USER_MODEL, related_name='to_user')
from_user=models.ForeignKey(settings.AUTH_USER_MODEL, related_name='from_user')
class Image(models.Model):
imageuploader_profile=models.ForeignKey(settings.AUTH_USER_MODEL)
upload_image=models.ImageField()
Upvotes: 1
Views: 352
Reputation: 476719
You can filter the queryset with:
from django.contrib.auth.decorators import login_required
@login_required
def home(request):
friend_images = Image.objects.filter(imageuploader__profile__friends__user=request.user)
return render(request, 'home.html', {'friend_images': friend_images})
or you can include the imageuploader
as well with:
from django.contrib.auth.decorators import login_required
from django.db.models import Q
@login_required
def home(request):
friend_images = Image.objects.filter(
Q(imageuploader=request.user) |
Q(imageuploader__profile__friends__user=request.user)
return render(request, 'home.html', {'friend_images': friend_images})
Upvotes: 4