kakakakakakakk
kakakakakakakk

Reputation: 519

django pre filled form

I want form data to be pre filled when rendered first time, the initial parameter does not affect the form at all. When user edits profile I want user data to be displayed in the form.

def profile_update(request):
    if request.method == 'POST':
        form = UpdateProfile(
            initial={'username': 'Hi there!'}, instance=request.user)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('profile'))
    else:
        form = UpdateProfile()

    return render(request, 'users/profile_update.html', {'form': form})


class UpdateProfile(forms.ModelForm):
    email = forms.EmailField()
    img = forms.ImageField(label='img', required=False)

    class Meta:
        model = TbUser
        fields = ['username', 'img', 'email', 'cellphone', 'empno', 'real_name', 'nfc_id',
                  'sex', 'role', 'department']

Upvotes: 2

Views: 861

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476493

You need to pass the initial to the form in case of a GET request:

from django.shortcuts import redirect

def profile_update(request):
    if request.method == 'POST':
        form = UpdateProfile(request.POST, request.FILES, instance=request.user)
        if form.is_valid():
            form.save()
            return redirect('profile')
    else:
        form = UpdateProfile(initial={'username': 'Hi there!'})

    return render(request, 'users/profile_update.html', {'form': form})

Upvotes: 3

Related Questions