如何通过基于 class 的视图将图像保存到 Django 中的数据库

How to save an image via class based viewto database in Django

我有一个个人资料更新表单,可以很好地更新名称,但不会更新图像。我不确定为什么。我不确定在基于 class 的视图中的哪个位置更新了名称...我知道您需要清理图像,但首先我只是尝试上传它。

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")

在 forms.py 中,我尝试创建以下代码,但它 returns 是 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)
...

文件上传需要在HTML中指定表单的enctype:

<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>