Я хочу получить все объекты Post, у которых есть хотя бы один followUser, чей user=request.user

FieldError at /en/account/profile/follow_list/ Невозможно преобразовать ключевое слово 'followidf' в поле. Возможные варианты: author, author_id,

Этот пролет может быть настолько глубоким, насколько вы захотите.

Это работает и в обратную сторону. Хотя это можно настроить, по умолчанию вы ссылаетесь на "обратную" связь в поиске, используя строчное имя модели.

Этот пример извлекает все объекты Post, у которых есть хотя бы один followUser, чей user=request.user

class Post(models.Model):
    title = models.CharField(max_length=250)
    excerpt = models.TextField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    favourite = models.ManyToManyField( User, related_name='favouriteUser', default=None, blank=True)
    avatar = models.ImageField( upload_to=user_directory_path, default='users/avatar.png')
    bio = models.TextField(max_length=5500, blank=True)
    fullName = models.CharField(max_length=221, blank=True, default=rand_slug(5) )
    dr = models.BooleanField( default=False )
    slug = models.SlugField(max_length=250, unique=True, blank=True, default=rand_slug(8))

class followUser(models.Model):

    folPr = models.ForeignKey(Profile, related_name='followfp',on_delete=models.CASCADE, default=None, blank=True)
    follUser = models.ForeignKey(User, related_name='followidf',on_delete=models.CASCADE, default=None, blank=True)
    vote = models.BooleanField(default=True)
    publish = models.DateTimeField(default=timezone.now)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    def __str__(self):
        return self.follUser.username


@ login_required
def follow_list(request):
    new2 = Post.objects.filter( followidf__followidf=request.user )
    return render(request, 'accounts/follow_list.html', {'new':  new2  } )

попробуйте это id_list = User.objects.prefetch_related('followidf_set).filter(id=request__user__id).values_list('id',flat=True).all() Post.objects.filter(user__id__in=id_list)

Post.objects.filter( followidf__user__author =request.user )

or,

Post.objects.filter( folluser__user__author =request.user )

Вы можете попробовать это, если вы получаете автора как request.user.

или можно изменить эту часть __author , то что вы получаете как request.user .

попробуйте этот код

@login_required
def follow_list(request):
    follow = Profile.objects.filter( followfp__follUser= request.user)
    user =[]
    for d in follow:
        user +=[d.user]
        print(d.user.id)
    new  = Post.objects.filter( author__in = user) 

    return render(request, 'accounts/followList.html', {'new': new  } )

этот код работает, но я не хочу использовать цикл

@login_required
def follow_list(request):
    follow = Profile.objects.filter( followfp__follUser= request.user)
    user =[]
    for d in follow:
        user +=[d.user]
        print(d.user.id)
    new  = Post.objects.filter( author__in = user) 

    return render(request, 'accounts/followList.html', {'new': new  } )
Вернуться на верх