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].