[Django]-Allow user to change its picture. Django

2👍

Make sure you request a UserProfile object first, then

Looks like you should use

image = request.FILES['image']
userprofile.profilepic = image

instead of

image = request.POST.get('image')
userprofile.profilepic.url = image

See This example, the views.py section, as Jake said

👤TimDC

1👍

You need to include enctype="multipart/form-data" in your form. Here is an example of how to update an ImageField:

first the update_form.html:

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" class="save btn btn-default">Update</button>
</form>

Then the form:

from django.contrib.auth import get_user_model


class EditProfile(UserChangeForm):
    class Meta:
        model = get_user_model()
        fields = ('email', 'name', 'avatar')

And finally the view:

def user_edit(request):
    if request.method == 'POST':
        form = EditProfile(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            if request.FILES.get('avatar', None) != None:
                try:
                    os.remove(request.user.avatar.url)
                except Exception as e:
                    print('Exception in removing old profile image: ', e)
                request.user.avatar = request.FILES['avatar']
                request.user.save()
            return redirect('user:profile', id=request.user.id)
    else:
        form = EditProfile(instance=request.user)
        return render(request, 'user/user-edit.html', {'form': form})

Leave a comment