Reputation: 1935
I have an profile update form that updates name just fine, however it doesn't update the image. I'm not sure why. I'm not exactly sure where in the class based view the name gets updated for that matter... I know you need to clean your image, but first I'm trying to just upload it.
views.py
class UserDetailUpdateView(LoginRequiredMixin, UpdateView):
form_class = UserDetailChangeForm
template_name = 'accounts/detail-update-view.html'
def get_object(self):
return self.request.user
def get_context_data(self, *args, **kwargs):
context = super(UserDetailUpdateView, self).get_context_data(*args, **kwargs)
context['title'] = 'Change Your Account Details'
return context
def get_success_url(self):
return reverse("account:home")
In the forms.py, I tried creating the below code, but it returns a NoneType.
def clean_avatar(self):
avatar = self.cleaned_data['avatar']
forms.py
class UserDetailChangeForm(forms.ModelForm):
full_name = forms.CharField(label='Name', required=False, widget=forms.TextInput(attrs={"class": 'form-control'}))
class Meta:
model = User
fields = ['full_name','avatar']
html
<input type="file" name="avatar" id="id_avatar">
<button type='submit' class='btn btn-default my-3'>Save</button>
models.py
class User(AbstractBaseUser):
email = models.EmailField(max_length=255, unique=True)
full_name = models.CharField(max_length=255, blank=True, null=True)
avatar = models.ImageField(upload_to='images/', blank=True)
...
Upvotes: 0
Views: 535
Reputation: 47354
You need to specify form's enctype
in HTML for file upload:
<form method="post" enctype="multipart/form-data">
<input type="file" name="avatar" id="id_avatar">
<button type='submit' class='btn btn-default my-3'>Save</button>
</form>
Upvotes: 1