如何在 Django 中更新 ImageField
How to update an ImageField in Django
我正在制作一个网站,希望每个用户都可以上传和更新自己的个人资料图片。
更新配置文件模板加载完美。我可以更新所有其他字段,图像字段除外。它只能从 /admin 页面更新,不能从 update-profile 页面更新。
这是我在配置文件模型中的图像字段:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
dob = models.DateField(default=datetime.date(1989, 12, 25))
gender = models.CharField(max_length=12, choices=GENDER_CHOICES, default='Unspecified')
city = models.CharField(max_length=100, default='Braşov')
image = models.ImageField(upload_to='profilepics', blank=True)
这是我的个人资料表格:
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('dob', 'gender', 'city', 'image')
这是 html 模板:
{% block body %}
<form method="post">
<div class="container">
{% csrf_token %}
{{ user_form.as_p }}
{{ profile_form.as_p }}
<button type="submit">Update</button>
<a href="myprofile" class="btn btn-info" role="button">Cancel</a>
</form>
</div>
{% endblock %}
这是 update_profile 视图:
@login_required
@transaction.atomic
def update_profile(request):
if request.method == 'POST':
user_form = UserForm(request.POST, instance=request.user)
profile_form = ProfileForm(request.POST, request.FILES, instance=request.user.profile)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
messages.success(request, ('Your profile was successfully updated!'))
return redirect('myprofile')
else:
messages.error(request, ('Please correct the error below.'))
else:
user_form = UserForm(instance=request.user)
profile_form = ProfileForm(instance=request.user.profile)
return render(request, 'filter/updateprofile.html', {
'user_form': user_form,
'profile_form': profile_form
})
非常感谢您的阅读!
将属性 enctype 添加到 html 文档中的表单标记 enctype="multipart/form-data"
看到这个问题
Django ModelForm Imagefield Upload
如 w3schools 中所述
https://www.w3schools.com/tags/att_form_enctype.asp
我正在制作一个网站,希望每个用户都可以上传和更新自己的个人资料图片。
更新配置文件模板加载完美。我可以更新所有其他字段,图像字段除外。它只能从 /admin 页面更新,不能从 update-profile 页面更新。
这是我在配置文件模型中的图像字段:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
dob = models.DateField(default=datetime.date(1989, 12, 25))
gender = models.CharField(max_length=12, choices=GENDER_CHOICES, default='Unspecified')
city = models.CharField(max_length=100, default='Braşov')
image = models.ImageField(upload_to='profilepics', blank=True)
这是我的个人资料表格:
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('dob', 'gender', 'city', 'image')
这是 html 模板:
{% block body %}
<form method="post">
<div class="container">
{% csrf_token %}
{{ user_form.as_p }}
{{ profile_form.as_p }}
<button type="submit">Update</button>
<a href="myprofile" class="btn btn-info" role="button">Cancel</a>
</form>
</div>
{% endblock %}
这是 update_profile 视图:
@login_required
@transaction.atomic
def update_profile(request):
if request.method == 'POST':
user_form = UserForm(request.POST, instance=request.user)
profile_form = ProfileForm(request.POST, request.FILES, instance=request.user.profile)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
messages.success(request, ('Your profile was successfully updated!'))
return redirect('myprofile')
else:
messages.error(request, ('Please correct the error below.'))
else:
user_form = UserForm(instance=request.user)
profile_form = ProfileForm(instance=request.user.profile)
return render(request, 'filter/updateprofile.html', {
'user_form': user_form,
'profile_form': profile_form
})
非常感谢您的阅读!
将属性 enctype 添加到 html 文档中的表单标记 enctype="multipart/form-data"
看到这个问题 Django ModelForm Imagefield Upload
如 w3schools 中所述 https://www.w3schools.com/tags/att_form_enctype.asp