我有一个运行良好的博客应用程序。但是,我想扩展其功能以包括一个供用户关注作者的选项。我创建了一个具有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 %}
因此,我能够通过显示我所关注的人来使其工作。我需要将跟随数据修改为数组的数组,以便返回以下内容和跟踪对象。
但是我该如何退还我所关注的这些人的职位?