【问题标题】:Django queryset in view isn't returning anything to the html template视图中的 Django 查询集没有向 html 模板返回任何内容
【发布时间】:2021-05-27 01:43:29
【问题描述】:

我想在其个人资料页面中显示特定用户的所有帖子,但只显示他们的个人资料信息而不显示帖子。

我的初始代码只是尝试像这样循环遍历模板中的帖子:

      {% for post in user.posts.all %}
      {% endfor %}

但它没有用。所以我接下来尝试了这个。

views.py

     user = get_object_or_404(User, username=username)
     post = Post.objects.filter(created_by=user.id)

     context = {
          'user': user,
          'post': post
     }

     return render(request, 'users/profile.html', context)

profile.html

<div class="user-profile">
    <img class="rounded-circle account-img" src="{{ user.profile.image.url }}">
    {{ user.username }}
    {{ user.email }}
</div>

<div class="user-post-model">
{% for post in posts %}
   <img class="rounded-circle post-img" src="{{ post.created_by.profile.image.url }}">
   {{ post.title }}
   {{ post.content|safe }}
   {{post.tag}}
   {{ post.created_by }}
   {{ post.created_at|naturaltime}}
{% endfor %}
</div>

也没有用

我还尝试使用 ListView 发布帖子。它有效,但不是显示特定用户的个人资料信息,而是显示登录用户的个人资料信息,而是显示特定用户的帖子。

像这样:

def profile(request, username):
     user = get_object_or_404(User, username=username)

     context = {
          'user': user
     }

     return render(request, 'users/profile.html', context)

class UserPostListView(ListView):
     model = Post
     template_name = 'users/profile.html'
     context_object_name = 'posts'
     
     def get_queryset(self):
          user = get_object_or_404(User, username=self.kwargs.get('username'))
          return Post.objects.filter(created_by=user).order_by('-created_at')

这是后期模型

class Post(models.Model):
     title =  models.CharField(max_length=255)
     content = RichTextField(blank=True, null=True, max_length=30000)
     created_at = models.DateTimeField(default=timezone.now)
     created_by = models.ForeignKey(User, on_delete=models.CASCADE)
     tag =  models.CharField(max_length=255, default='uncategorised')

     class Meta:
          ordering = ('-created_at',)

     def __str__(self):
          return self.title + ' | ' + str(self.created_by)

     def get_absolute_url(self):
          return reverse("post-detail", kwargs={"pk": self.pk})

怎么了?

【问题讨论】:

  • {% for post in posts %} 在上下文中你已经通过了post 但你循环了posts
  • 你试过只用request.user吗?
  • 即使我输入了我之前尝试过的{% for post in post %},它也不会循环显示帖子。
  • request.user 也不返回任何东西@M-Chen-3
  • @AbdulAzizBarkat 我想要特定用户的帖子,而不仅仅是登录用户的帖子。就像查看某人的 Youtube\instagram 个人资料/帐户页面一样。它应该只返回该帐户的帖子。 request.user 当我点击某人的帐户时,只给我登录用户的信息。

标签: python django django-views django-queryset django-listview


【解决方案1】:

要将相关的Post 对象循环到User,请使用_set (Django Docs)。

所以在你的情况下user.post_set

{% for post in user.post_set.all %}
    {{ post.title }}
{% endfor %}

【讨论】:

  • @ImmortalNoob,很高兴为您提供帮助)))和编码成功。
猜你喜欢
  • 2016-07-28
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
  • 2017-04-30
  • 2013-05-11
  • 2012-04-14
相关资源
最近更新 更多