Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 创建模型时如何覆盖/更新POST中的信息_Django_Forms_Models_Imagefield - Fatal编程技术网

Django 创建模型时如何覆盖/更新POST中的信息

Django 创建模型时如何覆盖/更新POST中的信息,django,forms,models,imagefield,Django,Forms,Models,Imagefield,我有一个处理POST请求并尝试创建新对象的视图。然而,我知道有些帖子的数据是无效的。。。但我想修复它,然后继续创建对象 要想“修复”ModelForm中的数据,唯一的方法就是创建一个“is_valid()”表单。为此,我可以使用POST数据创建表单,也可以使用现有实例创建表单。不幸的是,如果我使用POST数据,因为其中一些数据是无效的,表单将无法验证,因此我无法访问表单中的数据来修复它。如果我用一个已经存在的实例创建它,这是可行的,但是当表单显示时,任何剩余的错误都会因为任何原因被忽略(因此不会

我有一个处理POST请求并尝试创建新对象的视图。然而,我知道有些帖子的数据是无效的。。。但我想修复它,然后继续创建对象

要想“修复”ModelForm中的数据,唯一的方法就是创建一个“is_valid()”表单。为此,我可以使用POST数据创建表单,也可以使用现有实例创建表单。不幸的是,如果我使用POST数据,因为其中一些数据是无效的,表单将无法验证,因此我无法访问表单中的数据来修复它。如果我用一个已经存在的实例创建它,这是可行的,但是当表单显示时,任何剩余的错误都会因为任何原因被忽略(因此不会显示在网页上)。我尝试了从POST数据创建模型表单并给它一个实例的组合,但这似乎没有帮助。此外,我还尝试修改(一份)POST数据,修复它,然后从“修复”POST数据创建ModelForm。这类作品,除了我的表单中有一些ImageField,它们似乎被忽略了

任何帮助都将不胜感激。我已经看了每一个好的页面,我可以找到没有用

也许有更好的方法可以做到这一点?我试图解决的问题是,我想要一个包含ImageFields的模型。我第一次提交表单时,用户需要“上传”每个字段的图像。但是,如果他不更新其中一个字段的图像,我希望新表单在未上载图像的字段上提供一个图像上载按钮,并且只提供一个文本字段,其中包含已上载图像的图像名称


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( {} )