Как получить имя пользователя, которого я просматриваю, а не текущего зарегистрированного имени пользователя
Пожалуйста, помогите мне получить текущее имя пользователя для просмотра профиля и сохранить его в 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)