html - Django,用户可以更新电子邮件和用户名,但不能更新图像
问题描述
如标题所示,我在更新表单时遇到问题,因为一切都按我的意愿工作,但不是图像更新功能。它发送成功消息,但不会更改配置文件的图像。
视图.py
def profileView(request):
if request.method == 'POST':
u_form = UserUpdateForm(request.POST, instance=request.user,)
p_form = ProfileUpdateForm(request.POST, request.FILES, instance=request.user.profile)
if u_form.is_valid() and p_form.is_valid():
u_form.save()
p_form.save()
messages.success(request, 'Your account has been updated!')
return redirect('profile-page')
else:
u_form = UserUpdateForm(instance=request.user)
p_form = ProfileUpdateForm(instance=request.user.profile)
context = {
'u_form': u_form,
'p_form': p_form}
return render(request, 'shop/profile.html', context)
HTML:
<div>
{{ user.username }}
<img src="{{ user.profile.user_image.url }}">
<a href="{% url 'delete-page' pk=user.id %}">Delete</a>
<form method="POST"> {% csrf_token %}
{{ p_form.as_p}}
{{ u_form.username }}
{{ u_form.email }}
<button type="submit">Update</button>
</form>
</div>
信号.py
@receiver(post_save, sender=User)
def profile_creation(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
instance.profile.save()
{{ u_form.email }}
<button type="submit">Update</button>
</form>
</div>
解决方案
如果您以表单形式发送文件,则在 POST 请求中指定对图像进行编码的属性:enctype="multipart/form-data"
<form enctype="multipart/form-data" method="POST">
{% csrf_token %}
{{ p_form.as_p}}
{{ u_form.username }}
{{ u_form.email }}
<button type="submit">Update</button>
</form>
推荐阅读
- python - 如何通过 Selenium 和 Python 根据 html 将文本发送到 textarea
- rest - 角度 6 woocommerce REST 身份验证
- asp.net-web-api - .NET Core ApiController-Attribute 推断错误绑定
- angular - 为什么反应形式 prod build 会出错?
- jenkins - Jenkinsfile 声明式管道 - 没有这样的属性管道类
- android - 单个应用程序的两个不同进程中的 WebView 是否共享 Web 缓存?
- db2 - 为什么在执行以下查询时出现错误 SQLCODE=-204, SQLSTATE=42704, DRIVER=4.18.60
- python - `from __future__ 导入大括号`如何工作?
- typescript - 基于参数名称的函数返回类型
- mongodb - 如何从 mongoc_collection_find_with_opts 检索数据