FieldError at /favourites/ Cannot resolve keyword 'favpost' into field. Варианты: author, author_id

У меня ошибка FieldError в /en/account/profile/favourites/ Cannot resolve keyword 'favpost' into field. Варианты: author, author_id

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

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

Этот пример извлекает все объекты Post, которые имеют по крайней мере один favPost, чей user=request.user

class Post(models.Model):
    title = models.CharField(max_length=250)
    excerpt = models.TextField()

class favPost(models.Model):        post = models.ForeignKey(Post, related_name='postfv', on_delete=models.CASCADE, default=None, blank=True)
    user = models.ForeignKey(User, related_name='userfv', on_delete=models.CASCADE, default=None, blank=True)
    vote = models.BooleanField(default=True)
    publish = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.post


def favourite_list(request):
    new2 = Post.objects.filter( favpost__user=request.user )        
    return render(request, 'accounts/favourites.html', {'new':  new2  } )

Поскольку related_name=… параметр [Django-doc] для ForeignKey to post является related_name='postfv', вы, таким образом, запрашиваете с:

from django.contrib.auth.decorators import login_required

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

Кроме того, следует поместить post ForeignKey в качестве поля под favPost, так:

class FavPost(models.Model):
    post = models.ForeignKey(Post, related_name='postfv', on_delete=models.CASCADE, default=None, blank=True)
    user = models.ForeignKey(User, related_name='userfv', on_delete=models.CASCADE, default=None, blank=True)
    vote = models.BooleanField(default=True)
    publish = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return str(self.post)

Примечание: Вы можете ограничить представления для аутентифицированных пользователей с помощью декоратора @login_required декоратора [Django-doc].

Вернуться на верх