首页 > 解决方案 > 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>

标签: htmldjango

解决方案


如果您以表单形式发送文件,则在 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>

推荐阅读