Как я могу отобразить другую информацию пользователя в Django - PullRequest
0 голосов
/ 18 января 2019

Я создаю веб-сайт, который пользователь может просматривать в профиле других пользователей, но проблема в том, что когда пользователь вводит другой профиль пользователя, он отображает его личную информацию

это код файла urls.py

urlpatterns = [
    path('user/<str:username>', UserPostListView.as_view(), name='user-posts'),
]

это код файла view.py

class UserPostListView(ListView):
    model = Post = Profile
    template_name = 'website/user_posts.html'

    def get_queryset(self):
        user = get_object_or_404(User, username=self.kwargs.get('username'))
        return Post.objects.filter(author=user)

    def get_username_field(self):
        user = get_object_or_404(User, username=self.kwargs.get('username'))
        return Profile.objects.filter(user=user)

это файл models.py

class Profile(models.Model):

    user = models.OneToOneField(User, on_delete=models.CASCADE)

    age = models.IntegerField(verbose_name='Ålder', default=15, 
    blank=True)

    def get_absolute_url(self):
        return reverse('user_posts', kwargs={'pk': self.pk})

    def __str__(self):
        return f'{self.user.username} Profile'

файл user_posts.html

{{ user.get_full_name }}
{{ user.profile.age }}
{{ view.kwargs.username }}

в шаблоне показано имя пользователя, но нет имени и возраста.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Прежде всего, ваше get_username_field бесполезно.

В твоих views.py,

class UserPostListView(ListView):
    model = Profile
    template_name = 'website/user_posts.html'
    context_object_name = 'user_content'  
    allow_empty = False  #this will show 404 if the username does not exists

    def get_queryset(self):
        return User.objects.filter(username=self.kwargs['username']) 
        # you can do it in one line now 

Теперь, чтобы показать это в html,

{% for user in user_content %}
{{user.get_full_name}}
# rest of your code
{% endfor %}

Вы также можете показывать сообщения этого конкретного пользователя так же, как указано выше.

0 голосов
/ 18 января 2019

user всегда является текущим вошедшим пользователем. В вашем представлении используется модель профиля, поэтому вы можете получить доступ к profile или object.

{{ profile.user.get_full_name }}
{{ profile.age }}

Обратите внимание, ваш get_username_field метод никогда не вызывается и ничего не делает; Вы должны удалить его.

Заметьте также, что на самом деле не очень хорошая идея хранить age как целое число в базе данных. Это означает, что вам как-то приходится обновлять его каждый год, так как у людей есть странная привычка стареть ... Лучше хранить дату рождения и иметь метод для отображения возраста.

...