Как получить имя пользователя, которого я просматриваю, а не текущего зарегистрированного имени пользователя

Пожалуйста, помогите мне получить текущее имя пользователя для просмотра профиля и сохранить его в instance.user, Проблема в том, что я хочу получить имя пользователя, который будет оценен для других пользователей. Вот мой код:

def new_rate(request):
    if request.method == 'POST':
        form = RateForm(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            try:
                instance.rater = request.user
    --------->  instance.user = !!!!! GET THE CURRENT  PROFILE VIEWING USERNAME !!!!!
                instance.validate_unique()
                instance.save()
                form.save_m2m()
                return HttpResponseRedirect('/user/' + request.user.username)

1 ответ

Вы можете получить только request.user.username если ваш пользователь аутентифицирован. Чтобы проверить это используйте request.user.is_authenticated(),

Поэтому я думаю, что это будет выглядеть примерно так:

def new_rate(request):
    if request.method == 'POST':
        form = RateForm(request.POST)
        current_user = request.user
        if form.is_valid() and current_user.is_authenticated():
            instance = form.save(commit=False)
            try:
               instance.rater = current_user
               instance.user = current_user
               instance.validate_unique()
               instance.save()
               form.save_m2m()
               return HttpResponseRedirect('/user/' + current_user.username)

Но для меня ваш дизайн звучит некорректно. Если вы уже используете request.POST, вы должны POST идентифицировать текущий профиль.

Если, например, вы просматриваете URL /users/500 и у вас есть форма. Отправьте идентификатор 500, а затем в представлении он должен получить текущий профиль пользователя, как:

from django.contrib.auth import get_user_model

User = get_user_model()

def new_rate(request):
    if request.method == 'POST':
        form = RateForm(request.POST)
        current_user = request.user
        profile_id = request.POST['profile_id']

        if form.is_valid() and current_user.is_authenticated():
            instance = form.save(commit=False)
            profile_user = User.objects.get(pk=profile_id)

            try:
               instance.rater = current_user
               instance.user = profile_user
               instance.validate_unique()
               instance.save()
               form.save_m2m()
               # it should  return us back to that profile, not the request.user's
               return HttpResponseRedirect('/user/' + profile_user.username)
Другие вопросы по тегам