Я хочу получить все объекты 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 } )