3

尝试显示用户的所有Announce对象时出现问题。我的问题是:考虑我以 id=1 的用户身份登录。当我转到/users/1/时,它会显示我所有的帖子。但问题是,当我想通过转到 /users/2/ 显示另一个 id=2 用户的所有帖子时,它仍然显示我所有的 Announce 对象,而不是 id=2 的用户。

模型.py

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)

网址.py

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

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.objects.get(pk=???) ?

我感谢您的帮助!

4

1 回答 1

11

request.user是登录的用户。您需要使用pk作为 url 传递的那个。这存储在kwargs列表视图的字典中:

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'])
于 2017-12-01T16:11:38.063 回答