首页 > 解决方案 > 在 django 中更新用户配置文件时未保存图像

问题描述

我正在尝试更新用于在内置用户模型上保存附加信息的用户配置文件模型,现在当我尝试更新它时,图像不会被保存。我需要帮助来解决这个问题

# In views.py 
@login_required(login_url=LOGIN_REDIRECT_URL)
def update_user_profile(request):
    userobj = get_object_or_404(UserProfile, user=request.user)
    form = UserProfileForm(data = request.POST or None,files= request.FILES or None, instance=userobj)
    if request.method=='POST':
        print(form.is_valid())
        if form.is_valid():
            profile = form.save(commit=False)
            profile.picture = form.cleaned_data['picture']
            profile.about = form.cleaned_data['about']
            profile.save()
        else:
            print("NO picure")
        return HttpResponseRedirect("/blog/profile/")

    return render(request, "blog/post_update.html", {'form':form})

#models.py
class UserProfile(models.Model):
    user    = models.OneToOneField(User, on_delete=models.CASCADE)
    about = models.CharField(max_length=200, null=True, blank=True)
    picture = models.ImageField(upload_to="profile_images/", blank=True)

    def __str__(self):
        return str(self.user)


#In forms.py
class UserProfileForm(forms.ModelForm):


    def __init__(self, *args, **kwargs):
        super(UserProfileForm, self).__init__(*args, **kwargs)
        self.fields['about'].widget.attrs.update({'class': 'form-control '})
        self.fields['picture'].widget.attrs.update({'class': 'form-control-file'})
    class Meta:
        model = UserProfile
        fields = ('about', 'picture')

# userprofileform.html
{% extends 'base.html' %}


{% block content %}
<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" class="btn btn-primary" value="Create Profile">
</form>

{% endblock %}


请看一下代码和帮助。注册时,如果图像已上传,则会保存,但是当我尝试直接在个人资料部分中更新用户个人资料时,图像不会更改,并且显示与用户注册时保存的相同,否则显示无。

标签: pythondjangodjango-orm

解决方案


我对 settings.py 中的模板进行了一些更改,并让我的项目运行起来。问题是我没有正确提及模板目录


推荐阅读