如何通过基于 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>
我有一个个人资料更新表单,可以很好地更新名称,但不会更新图像。我不确定为什么。我不确定在基于 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>