Django编辑页PostForm验证失败提示所有字段为空
问题根因
你在视图post方法中初始化PostForm时添加了prefix='post'参数,但是模板渲染post_form字段时没有同步添加前缀,导致表单期望接收的字段名是post-subtitle、post-latitude这类带前缀的格式,而实际请求提交的字段名是不带前缀的subtitle、latitude,表单无法读取到对应字段值,所以报错所有字段为必填项。
修复方案
直接去掉初始化PostForm时的prefix参数即可,修改视图中对应代码:
# 原代码 post_form = PostForm(data=post_data, instance=Post.objects.get(pk=self.kwargs['pk']), prefix='post') # 修改后 post_form = PostForm(data=post_data, instance=Post.objects.get(pk=self.kwargs['pk']))
其他注意事项
- 你当前代码在表单验证通过后没有调用
save方法保存Post的修改内容,需要在if post_form.is_valid()代码块中补充调用:if post_form.is_valid(): print('valid form') # 新增这行,调用你已经写好的form_save方法保存Post修改 self.form_save(post_form, request) # 保存关联的图片、视频 for i in images: # 建议直接传Post实例而非主键值,更规范 instance = PostImage(image=i, post=post_form.instance) instance.save() for v in videos: instance = PostVideo(video=v, post=post_form.instance) instance.save() - 模板中多个img标签使用了相同的
id="img-svg"、id="plus-svg",HTML中id必须唯一,建议修改为class避免前端逻辑异常。
内容的提问来源于stack exchange,提问作者Sean Palmer
相关产品推荐
相关产品推荐

