Django ListView检索特定于用户的模型字段

时间:2018-04-18 11:21:57

标签: django django-models django-views

Django的新手,所以请耐心等待......

我有一个用户对发布到网站的文章发表的评论列表。对于每个评论,我给出发布它的用户的名字。 我想要它,以便当您点击用户名时,它会将您带到所有该用户评论的列表。但是,我无法弄清楚如何指定在我的views.py文件中。

以下代码使列表中包含指向用户名的链接:

{% for comment in article.comments.all %}
    <ul class="list-group">
        <li class="list-group-item">{{ comment }}
            <div class="Link-detail">
                <a href="{% url 'Article:by_user' comment.author%}">
                 @{{ comment.author }}
                 </a>
            </div>
        </li>
    </ul>
{% endfor %}

当您点击链接时,它会转到urls.py文件中指定的正确网址,因此没有任何问题。

模板工作正常,我循环浏览评论:

{% for comment in comment_list %}
    <li>{{ comment.text }}</li>
{% endfor %}

我认为模型是正确的:

class Comment(models.Model):
    article = models.ForeignKey(Article, related_name='comments', 
              on_delete=models.CASCADE)
    author = models.ForeignKey(User, related_name='usercomments', 
              on_delete=models.CASCADE)
    text = models.TextField()
    created_date = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.text

    class Meta():
        ordering = ['-created_date']

所以,这是我迷路的地方:

class UserComments(ListView):
    model = Comment
    template_name = "news/user_comment_list.html"
    context_object_name = 'comment_list'

我将基于类的视图设置为ListView,拉入model,分配template_namecontext_object_name,但我可以&#39 ; t弄清楚如何过滤它,以便返回到context_object_name的信息被过滤到与点击的comment.author名称对应的列表。 如何获取该链接名称并在过滤器中使用它,我该怎么做? 该过滤器应该如何构建?

2 个答案:

答案 0 :(得分:1)

您可以覆盖get_queryset并使用网址中的用户名过滤查询集。您可以从self.kwargs

的网址中访问关键字参数
class UserComments(LoginRequewdListView):
    model = Comment
    template_name = "news/user_comment_list.html"
    context_object_name = 'comment_list'

    def get_queryset(self):
        queryset = super(UserComments, self).get_queryset()
        return queryset.filter(author__username=self.kwargs['username'])

您可能需要根据您的网址格式稍微调整过滤器。

答案 1 :(得分:0)

您可以覆盖get_context_data()。有关详细信息,请参阅documentation.希望这有帮助!