Как получить модель-объект, используя другие модели в django

Мне нужно если пользователь запрашивает следующую страницу, то ответом на запрос должна быть страница, содержащая конкретные сообщения, сделанные пользователями, за которыми следует пользователь, который запрашивает. Я думал сделать некоторые действия для этого:

  1. Get the requester
  2. Get the users who are followed by the requester
  3. Get the posts created by the users the who are being followed

В моем models.py:

class User(AbstractUser):
    image_url = models.CharField(max_length=5000, null=True)


class Follow(models.Model):
    follower = models.ForeignKey(
        User, on_delete=models.PROTECT, related_name="follower")
    following = models.ForeignKey(
        User, on_delete=models.PROTECT, related_name='following')


class Post(models.Model):
    content = models.CharField(max_length=140)
    date_created = models.DateTimeField(auto_now_add=True)
    poster = models.ForeignKey(User, on_delete=models.CASCADE)

В моем файле views.py:

def following_page(request, username):
    user = User.objects.get(username=username)
    f = user.following.all()
    posts = Post.objects.filter(poster=f.following)
    posts = posts.order_by("-date_created").all()
    return render(request, 'network/index.html', {
        "posts": posts
    })

В нем говорится

AttributeError 'QuerySet' object has no attribute 'following'

Нужно ли менять модель? Как решить проблему?

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

from django.contrib.auth.decorators import login_required

@login_required
def following_page(request):
    posts = Post.objects.filter(poster__following__follower=request.user)
    return render(request, 'network/index.html', {
        'posts': posts
    })

Поскольку вы используете вошедшего пользователя, используется request.user, и, таким образом, представлению нет смысла принимать имя пользователя.


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


Примечание: Обычно лучше использовать settings.AUTH_USER_MODEL [Django-doc] для ссылки на модель пользователя, чем использовать User модель [Django-doc] напрямую. Для получения дополнительной информации вы можете посмотреть ссылка на User модель раздел документации .

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