Значение формы Django "ImageField" равно None

Я пытаюсь реализовать поле картинки профиля для пользователей. Ниже приведен код для каждого файла для реализации, которую я пробовал, forms.py, models.py, views.py и urls.py.

Я использую IDE (vscode) для отладки django, и я поставил точку останова на строке user.avatar = form.cleaned_data['avatar'] в views.py ниже, чтобы быстро проверить, заполняется ли cleaned_data['avatar'] как пользовательский ввод, как я ожидаю.

Однако, даже после того, как я загружаю файл по url, отправляю, строка показывает None, в то время как ожидается объект изображения, и, конечно, это ничего не сохраняет, так что никаких изменений в базе данных тоже нет.

# 
# forms.py 
# accounts/forms.py
# 

from accounts.models import UserProfile

# .. 

class UserProfileForm(forms.ModelForm):

    avatar = forms.ImageField(label=_('Avatar'))

    class Meta:
        model = UserProfile
        
        fields = [
            'avatar',
        ]

    def __init__(self, *args, **kwargs):
        super(UserProfileForm, self).__init__(*args, **kwargs)
        self.fields['avatar'].required = False

# 
# models.py
# accounts/models.py
# 

from django.contrib.auth.models import User
from PIL import Image 

class UserProfile(models.Model):
    user   = models.OneToOneField(User, on_delete=models.CASCADE)
    avatar = models.ImageField(upload_to="images", blank=True, null=True)

# note: I also did "python manage.py makemigrations accounts; python manage.py migrate accounts;"

# 
# views.py
# accounts/views.py
# 

class UserProfileView(FormView):
    template_name = 'accounts/profile/change_picture.html'
    form_class = UserProfileForm

    def form_valid(self, form):
        user = self.request.user
        user.avatar = form.cleaned_data['avatar']
        user.save()
        
        messages.success(self.request, _('Profile picture has been successfully updated'))

        return redirect('accounts:change_profile_picture')

# 
# urls.py
# accounts/urls.py
# 

from .views import UserProfileView

urlpatterns = [
    # ..
    path('change/profile_picture/', UserProfileView.as_view(), name='change_profile_picture'),
]


Что не так с кодом? Спасибо.

<form method="post" enctype="multipart/form-data">
        
  {% csrf_token %}
  {% bootstrap_form form %}
        
  <button class="btn btn-success">{% trans 'Change' %}</button>
        
</form>
Вернуться на верх