Home > OS >  how to pass the username to the member who fill a form?
how to pass the username to the member who fill a form?

Time:10-08

i have a form, and i want to pass the user to it to see which logged in user filled it. this is my 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')

and this is my view, i asked for the user with request.user , but the field in db always is empty for username.

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)

so i have user in my models which has foreign key to my account

user = models.ForeignKey(Account,on_delete=models.CASCADE, null=True, blank=True)

and this is my template:

<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>

CodePudding user response:

The problem lies in the way you are saving your form. You set the user attribute on the form, instead of the actual model object. The following should fix your issue

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)
  • Related