Sahil Mohile
Sahil Mohile

Reputation: 99

Form is returning invalid for username value

I am trying to submit a username as default value for a model form but after submitting the value field turns blank after submit. Hence the form doesn't validate.

This is my form:

class WeeklyForm(ModelForm): 

    class Meta:
        model = wreport
        fields = [ 'tname' ,'classes', 'fdate', 'tdate', 'objective', 'tplan', 'how', 'material', 'extra']
        required = False
        widgets = {
            'tname' : TextInput(attrs= {'class' : 'form-control', 'disabled' : True}),
            'classes' : Select(attrs= {'class' : 'form-control'}),
            'fdate' : DateInput(attrs= {'class' : 'form-control'}),
            'tdate' : DateInput(attrs= {'class' : 'form-control'}),
            'objective' : Textarea(attrs= {'class' : 'form-control'}),
            'tplan' : Textarea(attrs= {'class' : 'form-control'}),
            'how' : Textarea(attrs= {'class' : 'form-control'}),
            'material' : Textarea(attrs= {'class' : 'form-control'}),
            'extra' : Textarea(attrs= {'class' : 'form-control'}),
        }

This is my view:

@login_required(login_url='login')
def weekly(request):
    context = ''
    weekly_form = WeeklyForm()
    daily_form = DailyForm()


    if request.method == 'POST' and 'weekly' in request.POST:
        initial = {'tname' : request.user.username}
        form = WeeklyForm(request.POST or None, initial = initial)
        # print(form['tname'])

        if form.is_valid():
            # print(form)
            # form.save(commit=False)
            # form.tname = request.user.username
            form.save()
            # print(form.tname)


            messages.success(request, "Your report was submitted Successfully.")
        else:
            messages.error(request, form.errors)
            # print(form.errors)
    else:
        initial = {'tname' : request.user.username}
        weekly_form = WeeklyForm(initial = initial)

I have tried sending value from form via kwargs but that doesn't help either. I have also tried making username default value for database which doesn't work as well. The tname should be a value auto generated from username. Any suggestions to resolve would be nice.

Upvotes: 1

Views: 144

Answers (1)

ImustAdmit
ImustAdmit

Reputation: 507

Try:

        if form.is_valid():
            my_form = form.save(commit=False)
            my_form.tname = request.user.username
            my_form.save()

Upvotes: 1

Related Questions