Как мне разрешить только моим друзьям видеть мой пост - PullRequest
1 голос
/ 22 марта 2020

Я Django новичок, как я могу разрешить только моим друзьям, людям, которые следуют за мной (from_user), и людям, которым я подписан (to_user), видеть мой пост. Я пробовал это, но я не получаю никаких результатов.

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()

1 Ответ

3 голосов
/ 22 марта 2020

Вы можете отфильтровать набор запросов с помощью:

from django.contrib.auth.decorators import login_required

@login_required
def home(request):
    friend_images = Image.objects.filter(<b>imageuploader__profile__friends__user=request.user</b>)
    return render(request, 'home.html', {'friend_images': friend_images})

или также можете включить imageuploader с помощью:

from django.contrib.auth.decorators import login_required
from django.db.models import Q

@login_required
def home(request):
    friend_images = Image.objects.filter(
        <b>Q(imageuploader=request.user) |</b>
        <b>Q(</b>imageuploader__profile__friends__user=request.user<b>)</b>
    return render(request, 'home.html', {'friend_images': friend_images})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...