Как передать имя пользователя пользователю, который заполняет форму?

У меня есть форма, и я хочу передать ей пользователя, чтобы увидеть, какой зарегистрированный пользователь заполнил ее. это мой 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)
Вернуться на верх