GistDom Blog
GistDom Blog

Reputation: 51

How do i allow only my friends to see my post

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

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

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

Related Questions