代码之家  ›  专栏  ›  技术社区  ›  filipyoo

Django:从特定用户获取所有对象

  •  3
  • filipyoo  · 技术社区  · 7 年前

    我在尝试显示所有 宣布 来自用户的对象。 /用户/1/ 它显示我的所有帖子。但问题是,当我想通过转到/users/2/来显示另一个id为2的用户的所有帖子时,它仍然显示我的所有公告对象,而不是id为2的用户。

    class Announce(models.Model):
        owner        = models.ForeignKey('auth.User', related_name='announces')
        created_date = models.DateTimeField(auto_now_add=True)
        body         = models.TextField(max_length=1000)
    

    意见。py公司

    class UserAnnouncesList(ListView):
        model = Announce
        template_name = 'myApp/user_announces_list.html'
        context_object_name = 'all_announces_by_user'
    
        def get_queryset(self):
            return Announce.objects.filter(owner=self.request.user)
    

    URL。py公司

    urlpatterns = [
    url(r'users/(?P<pk>[0-9]+)/$', views.UserAnnouncesList.as_view(), name='user_announces_list'),]
    

    用户宣布列表。html

    {% extends "account/base.html" %}
    
    {% block content %}
    {% for announce in all_announces_by_user %}
    <h1>{{announce.user.username}}</h1>
        <p>{{announce.body}}</p>
    
    {% endfor %}
    {% endblock content %}
    

    我必须用一些类似:Announce的词吗。物体。get(pk=???)?

    我感谢你的帮助!

    1 回复  |  直到 7 年前
        1
  •  11
  •   willeM_ Van Onsem    7 年前

    这个 request.user 是登录的用户 . 你需要 使用 pk 作为url传递。这存储在 kwargs listview字典:

    class UserAnnouncesList(ListView):
        model = Announce
        template_name = 'myApp/user_announces_list.html'
        context_object_name = 'all_announces_by_user'
    
        def get_queryset(self):
            return Announce.objects.filter(owner=self.kwargs['pk'])