Django 创建模型时如何覆盖/更新POST中的信息
我有一个处理POST请求并尝试创建新对象的视图。然而,我知道有些帖子的数据是无效的。。。但我想修复它,然后继续创建对象 要想“修复”ModelForm中的数据,唯一的方法就是创建一个“is_valid()”表单。为此,我可以使用POST数据创建表单,也可以使用现有实例创建表单。不幸的是,如果我使用POST数据,因为其中一些数据是无效的,表单将无法验证,因此我无法访问表单中的数据来修复它。如果我用一个已经存在的实例创建它,这是可行的,但是当表单显示时,任何剩余的错误都会因为任何原因被忽略(因此不会显示在网页上)。我尝试了从POST数据创建模型表单并给它一个实例的组合,但这似乎没有帮助。此外,我还尝试修改(一份)POST数据,修复它,然后从“修复”POST数据创建ModelForm。这类作品,除了我的表单中有一些ImageField,它们似乎被忽略了 任何帮助都将不胜感激。我已经看了每一个好的页面,我可以找到没有用 也许有更好的方法可以做到这一点?我试图解决的问题是,我想要一个包含ImageFields的模型。我第一次提交表单时,用户需要“上传”每个字段的图像。但是,如果他不更新其中一个字段的图像,我希望新表单在未上载图像的字段上提供一个图像上载按钮,并且只提供一个文本字段,其中包含已上载图像的图像名称Django 创建模型时如何覆盖/更新POST中的信息,django,forms,models,imagefield,Django,Forms,Models,Imagefield,我有一个处理POST请求并尝试创建新对象的视图。然而,我知道有些帖子的数据是无效的。。。但我想修复它,然后继续创建对象 要想“修复”ModelForm中的数据,唯一的方法就是创建一个“is_valid()”表单。为此,我可以使用POST数据创建表单,也可以使用现有实例创建表单。不幸的是,如果我使用POST数据,因为其中一些数据是无效的,表单将无法验证,因此我无法访问表单中的数据来修复它。如果我用一个已经存在的实例创建它,这是可行的,但是当表单显示时,任何剩余的错误都会因为任何原因被忽略(因此不会
2010年9月15日编辑: 好的,我想我可以把上面的问题简化为: def testing( request ) : test_form = UserProfileForm() valid = test_form.is_valid() return render( 'testing.tmpl', locals(), request ) def测试(请求): test_form=UserProfileForm() valid=测试形式。是否有效() 返回呈现('testing.tmpl',locals(),request) 当呈现上述代码时,“valid”显示为False(正如人们所期望的),但是“test_form”呈现时没有任何错误。我已经阅读了关于模型和模型表单的文档(如果可能不理解的话),我发现大多数时候模型表单(在我的例子中是UserProfileForm)是用指定的“实例”创建的。但是,1)我还没有实例,2)我仍然希望非实例的表单显示错误。我肯定我错过了什么。请说明。:) 还有一件事,上面的答案可能会回答,但据我所知,is_valid()调用应该调用我为UserProfileForm定义的“clean()”函数。但是,(不是python大师)我将“raisevalidationerror()”放在clean()的顶部,当我运行代码时,没有显示任何错误。想法
更新:我解决了问题,答案如下。谢谢 你应该看看。您可以操作从表单返回的数据,也可以进行任何形式的验证 如果您的ImageFields是可选的,那么您仍然可以验证它们(否则它们是正确的)
然后,根据他们是否已经上传了文件,调整模板以显示上传的文件名或文件上传字段。实际上,在第一种情况下,最好将这两个字段都给它们。这就是自动管理员所做的(上传字段被标记为“更改”)。好吧,在弄清楚如何使用python调试器(pdb)以及在emacs中它有点“正常工作”(哇!?)之后,我发现我的(空)表单没有绑定。通过谷歌搜索绑定的表单,我找到了这一页: RTFM'ing我发现我可以将一个空字典传递给我的表单,然后一切都开始按照我所期望的那样运行。因此,总而言之,这两者之间有很大的区别: test_form = UserProfileForm() test_form=UserProfileForm() 及 test_form=UserProfileForm({}) 第二个版本导致窗体的呈现显示所有错误(并调用“clean()”)
有被版主删除的风险;)感谢所有发表评论的人以及您对django新开发人员的耐心。嗨,David,欢迎来到StackOverflow。没有必要对每一个问题都说“嗨”和“谢谢”—结果真的只是噪音,所以我帮你把它去掉了 test_form = UserProfileForm( {} )