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

时间:2018-04-18 02:40:04

标签: django image-uploading

我有一个配置文件更新表单,可以更新名称,但不会更新图像。我不知道为什么。我不确定基于类的视图在哪里更新名称...我知道你需要清理你的图像,但首先我要尝试上传它。

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中,我尝试创建下面的代码,但它返回一个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)
...

1 个答案:

答案 0 :(得分:1)

您需要在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>