如何在博客作者上实现“关注”功能

时间:2019-08-29 02:50:29

标签: python django

我有一个运行良好的博客应用程序。但是,我想扩展其功能以包括一个供用户关注作者的选项。我创建了一个具有get_queryset函数的FeedListView类,但是我不知道如何使用它来返回登录用户所遵循的作者。

我的FeedListView看起来像这样:

class FeedListView(ListView):
    model = Post
    template_name = 'blog/feed_posts.html' # <app>/<model>_<viewtype>.html
    context_object_name = 'posts'
    paginate_by = 6

    def get_queryset(self):

        queryset = Post.objects.filter(author__followers=user)
        return queryset
        # self.user = self.get_object()
        # return Post.objects.filter(author__followers=user)

模型(用户)如下:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    follows = models.ManyToManyField('self', related_name='followed_by', symmetrical=False)

    def __str__(self):
        return f'{self.user.username} Profile'

url.py是:

path('feed/', FeedListView.as_view(), name='feed_posts'),

如果我能将其导航到url的状态,则仅显示跟随用户的帖子,我会很高兴。

但是我需要一些有关此查询集如何工作的指导,

此刻我得到的错误是用户未定义。

NameError at /feed/
name 'user' is not defined
Request Method: GET
Request URL:    http://localhost:8000/feed/
Django Version: 2.2.4
Exception Type: NameError
Exception Value:    
name 'user' is not defined
Exception Location: C:\django-projects\blogger\django_blogger\blogger\blog\views.py in get_queryset, line 86

==== 编辑

我将get_queryset更改为以下内容:

def get_queryset(self):
        follow_data = []
        following_me_data = []
        theUser = Profile.objects.filter(user_id__exact=self.request.user.id)
        theFollowers = theUser[0].follows.all()
        follow_data.append(theFollowers)
        following_me = theUser[0].followed_by.all()
        following_me_data.append(following_me)
        print(f'I follow: {follow_data}')
        print(f'{following_me_data} follows me')

        return theFollowers

,模板为:

<h1 class="mb-3">Followed users: ({{ page_obj.paginator.count }})</h1>
    {% for post in posts %}
    <article class="media content-section">
    <a href="{% url 'user-posts' post.user %}">{{ post.user }}</a>
    </article>
    {% endfor %}

因此,我能够通过显示我所关注的人来使其工作。我需要将跟随数据修改为数组的数组,以便返回以下内容和跟踪对象。

但是我该如何退还我所关注的这些人的职位?

0 个答案:

没有答案