【问题标题】:django returning author user name for a postdjango 返回帖子的作者用户名
【发布时间】:2018-05-11 20:00:24
【问题描述】:

我有一个 Post 模型

class Post(models.Model):
    user = models.ForeignKey(User, related_name="posts",on_delete=models.CASCADE,default=None)

在 views.py 文件中,我尝试根据特定过滤器返回我正在查看的用户的帖子(到目前为止一切正常),所以:

class UserPosts(generic.ListView):
    model = models.Post
    template_name = "posts/user_post_list.html"
    def get_queryset(self):
            self.y= self.model.objects.filter(user__username__iexact=self.kwargs.get("username"))
            return self.y.filter(message__icontains="jk")

然后我尝试使用用户名(我的模板中这篇文章的作者)所以我尝试了(这也有效):

def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)  
        context["post_user"] = self.kwargs.get("username")
        return context

然后我想到了另一种方法来做(get_context_data方法)。

我认为它应该工作,但它没有......我不知道为什么!所以这是不起作用的代码,并且通过我一个错误:

def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)  
        context["post_user"] = self.y.username
        return context

错误是:

'QuerySet' object has no attribute 'username'

那么为什么我无法通过模型获取用户名?我知道这是错误的,但是从模型中提取这些帖子的用户名的正确方法是什么,而不是使用 url 的 slug;我的意思是 context["post_user"] = self.kwargs.get("username")

对不起,如果那太长了,但我尽量说清楚..谢谢

【问题讨论】:

    标签: django django-models django-views


    【解决方案1】:

    self.y 的值是一个查询集:

    self.y= self.model.objects.filter(user__username__iexact=self.kwargs.get("username"))
    

    当您这样做时:self.y.username 您实际上是在尝试从 queryset 检索 username,这显然会引发错误。

    如果您倾向于从 Post queryset self.y(即特定用户的 posts_list)中捕获 username,则以下将输出用户名:

    context["post_user"] = self.y.first().user.username
    

    但最好使用您已经知道的context["post_user"] = self.kwargs.get("username")

    【讨论】:

    • 非常感谢..我真的很困惑..你是 100% 正确..真的很感谢你解释这个...
    【解决方案2】:

    也许我不明白你的问题,但你为什么不在视图中使用Post.objects.filter(user=request.user)* 而不是弄乱模型?

    *假设你想要的用户是请求用户。

    【讨论】:

    • 嗨,感谢您的回复,但 (user=request.user) 将返回现在登录的当前用户。想象一下,当我点击任何用户时,一个页面有很多作者的帖子定向到将列出他所有帖子的页面..这就是我不使用 user=request.user 的原因。
    猜你喜欢
    • 1970-01-01
    • 2018-02-07
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多