python - 在 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 %}
请看一下代码和帮助。注册时,如果图像已上传,则会保存,但是当我尝试直接在个人资料部分中更新用户个人资料时,图像不会更改,并且显示与用户注册时保存的相同,否则显示无。
解决方案
我对 settings.py 中的模板进行了一些更改,并让我的项目运行起来。问题是我没有正确提及模板目录
推荐阅读
- ios - Swift:Firebase 存储代码块未执行
- jestjs - 如何用玩笑测试 getDerivedStateFromProps
- javascript - 如何在 Material UI 自动完成组件中捕获选项选择事件?
- json - 使用正则表达式在 JSON 中使用 scala 删除多个双引号
- r - 将带有标签的额外形状添加到 ggplot2 图例
- c# - ASP.NET 数据保护 - 从 MachineKey 迁移
- oracle - 如何在 oracle 11g 中使用特殊字符更新值
- go - 有没有办法将哨兵消息输出到控制台
- istio - Istio 的通信 Sidecar 控制平面
- vue.js - 将已编译的 sass 作为字符串导入 vue