Как передать имя пользователя пользователю, который заполняет форму?
У меня есть форма, и я хочу передать ей пользователя, чтобы увидеть, какой зарегистрированный пользователь заполнил ее. это мой forms.py
from .models import UserInfo
from django import forms
class InfoForm(forms.ModelForm):
class Meta:
model = UserInfo
fields = ('name', 'age', 'male', 'female', 'height', 'weight',
'BMI', 'BFP', 'phone', 'r_g_weight', 'physical_ready', 'fitness',
'workour_sports', 'others', 'goal_expression', 'body_change',
'noob','low_pro','semi_pro','pro','motivation_level','goal_block',
'change_time','past_sports','injury','work','work_time','wakeup_time',
'work_start_time','sleep_time','daily','hard_to_wake','ready_to_work',
'life_situation','weight_feel','daily_jobs','health_ready','workout_period',
'what_sport','where_sport','home_sport','weekly_time','sport_dislike','daily_food',
'food_quantity','hunger','vitamins','rejims','vegetables','goal_rec',
'stop','rec','heart','chest','chest_month','dizzy','bones','blood','other_reason')
и это мое представление, я запрашиваю пользователя с помощью request.user, но поле в db всегда пустое для имени пользователя.
def userForm(request):
if request.method == "POST":
form = InfoForm(request.POST)
if form.is_valid():
form.user = request.user
form.save()
return redirect('profile')
else:
form = InfoForm()
context = {
'form':form
}
return render(request, 'fitness/user_form.html', context)
Итак, у меня есть пользователь в моих моделях, который имеет внешний ключ к моей учетной записи
user = models.ForeignKey(Account,on_delete=models.CASCADE, null=True, blank=True)
и это мой шаблон:
<div class="container">
<form action="{% url 'user-form' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="submit">
</form>
</div>
Проблема заключается в том, как вы сохраняете свою форму. Вы устанавливаете атрибут user на форму, а не на реальный объект модели. Следующее должно исправить вашу проблему
def userForm(request):
if request.method == "POST":
form = InfoForm(request.POST)
if form.is_valid():
# dont commit the object to the database as we need to set the user
object = form.save(commit=False)
# set the user
object.user = request.user
# finally save the object now that the user has been set
object.save()
return redirect('profile')
else:
form = InfoForm()
context = {
'form':form
}
return render(request, 'fitness/user_form.html', context)