python - 提交表单时出现 MultiValueDictKey 错误
问题描述
我是 Django 的新手,我正在一个网站上工作,用户可以在该网站上编辑他的个人资料(名字、姓氏、用户名、电子邮件),还可以使用单独的表单更改他的个人资料图片。个人资料图片表单提交时保存文件,但更新表单在提交表单时显示 'MultiValueDicKeyError at /account/edit' 'profile_pic'。以下是我的看法。
class Profile(models.Model):
user = models.OneToOneField(User)
bio = models.CharField(max_length=250,blank=True)
profile_pic = models.ImageField(upload_to='profile_images', blank=True)
class UpdateUserForm(forms.ModelForm)
class Meta:
model = User
fields = ('first_name', 'last_name', 'username', 'email')
class ProfilePic(forms.ModelForm)
class Meta:
model = Profile
fields = ('profile_pic', )
def profile_edit_view(request):
form = ProfilePic(request.Post or None, request.FILES or None)
if request.method == 'POST':
if form.is_valid():
pp = form.save(commit=False)
pp.user = request.user
pp, created = Profile.objects.get_or_create(user=request.user)
pp.profile_pic = request.FILES['profile_pic']
pp.save()
return redirect...
else:
form = ProfilePic()
updateform = UpdateUserForm(request.POST or None, instance=request.user)
if request.method == 'POST':
if updateform.is_valid():
updateform.save()
return redirect....
else:
updateform = UpdateUserForm()
context = {'form':form, 'updateform':updateform}
return render(request, 'profile_edit.html' context)
解决方案
您可以像这样保存表单并让 django 表单处理您的字段。
def profile_edit_view(request):
profile_form = ProfilePic()
updateform = UpdateUserForm()
if request.method == 'POST':
profile_form = ProfilePic(request.POST, request.FILES)
updateform = UpdateUserForm(request.POST, instance=request.user)
if profile_form.is_valid() and updateform.is_valid():
updateform.save()
profile = profile_form.save(commit=False)
profile.user = request.user
profile.save()
return redirect ...
return render(request, 'profile_edit.html' {'profile_form':profile_form,'updateform':updateform})
更新
我认为你没有在项目/设置中提供这个
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
这在你的 proejct/urls.py
urlpatterns=[
....
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
推荐阅读
- html - 引导程序中的布局 div
- javascript - 如何在 HTML Angular JS 中获取关键字段的全名(国家名称)?
- java - 将 protobuf-lite 消息转换为 JSON 并返回
- java - 转换 HashMap
> 使用 JAXB 到 XML - c# - 多重性约束违反了实体框架 6
- azure - Blob 存储到 Blob 存储
- php - PhpSpreadsheet 强制下载文件不起作用 - 格式错误
- spring-cloud - Spring Boot、Spring-Kafka 和 Spring-Cloud 兼容性
- pentaho - 如何使用 sql db 发布 Pentaho 报告?
- c# - 我应该在课堂上的哪个位置填充 MemoryCache?