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
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})
Source:stackexchange.com