Django 2 реализует профиль другого пользователя - PullRequest
0 голосов
/ 29 января 2019

Я работаю над проектом, использующим Python (3.7) и Django (2.1), в котором мне нужно реализовать представление для пользователей, чтобы просматривать профиль другого пользователя, я реализовал представление, оно показывает профиль, но отображает профильинформация.

Вот что я пробовал:

С models.py:

class ProfileModel(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='profile')
    avatar = models.CharField(max_length=500, null=True, blank=True)
    about = models.CharField(max_length=1000, null=True)
    slogan = models.CharField(max_length=500, null=True)
    profile_pic = models.ImageField(default='/assets/images/avatar.png', upload_to='profile_pics', null=True)

    def __str__(self):
        return self.user.username

С views.py:

class UserProfile(LoginRequiredMixin, CreateView):
    def get(self, request, *args, **kwargs):
        username = self.kwargs['username']
        user_profile = ProfileModel.objects.filter(user=User.objects.get(username=username))
        gigs = Gig.objects.filter(user__username=username, status=True)
        print(user_profile.values())
        return render(request, 'jobexpertapp/profile.html', {'user_profile': user_profile, 'gigs': gigs,
                                                             'name': username})

От templates/profile.html:

{% if name == user.username %}
    #, In this case, I will add a, `edit` button and display other 
     info
    # the info in this case id displaying correctly
{% else %}
    # Here I need to display other user's info e.g
    <h1> {{ user_profile.slogan }}</h1>

1 Ответ

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

Вы использовали filter вместо get в своем запросе, поэтому он возвращает набор запросов.Вот почему first работает, так как он получает первый результат для набора запросов.

Использование get:

user_profile = ProfileModel.objects.get(user=User.objects.get(username=username))

Обратите внимание, это проще записать:

user_profile = ProfileModel.objects.get(user__username=username)
...