0

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

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

任何帮助将不胜感激。我查看了所有可以找到的好页面,但无济于事。

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


编辑 2010 年 9 月 15 日:

好的,我想我可以将上述所有问题简化为:

定义测试(请求):
    test_form = UserProfileForm()
    有效 = test_form.is_valid()

    返回渲染('testing.tmpl',locals(),请求)

当上面的代码被渲染时,'valid' 显示为 False(正如人们所期望的那样),但 'test_form' 渲染没有任何错误。我已经通读(如果可能不理解?)关于模型和模型表单的文档,我看到大多数时候模型表单(在我的例子中:UserProfileForm)是使用指定的“实例”创建的。但是,1)我还没有实例,2)我仍然希望非实例表单显示错误。我确定我缺少一些东西。请照亮。:)

还有一件事,也许上面的答案无论如何都会回答,但据我所知,is_valid() 调用应该调用我为 UserProfileForm 定义的“clean()”函数。但是,(不是 python 大师)我将“raise ValidationError()”放在 clean() 的顶部,当我运行代码时,没有显示错误。想法?

更新:我发现了问题,答案如下。谢谢!

4

3 回答 3

1

您应该看看如何在 django 中清理表单字段。您可以在那里操作从表单返回的数据或进行任何类型的验证!

于 2010-11-12T12:40:49.053 回答
0

好吧,在弄清楚如何使用 python 调试器 (pdb) 以及在 emacs 中它有点“正常工作”(哇!?)之后,我发现我的(空)表单没有被绑定。谷歌搜索绑定表单将我指向此页面:

http://docs.djangoproject.com/en/dev/ref/forms/api/

RTFM'ing 我发现我可以将一个空字典传递给我的表单,然后一切都开始按照我的预期运行。因此,总而言之,两者之间存在很大差异:

test_form = UserProfileForm() 

test_form = UserProfileForm( {} ) 

第二个版本导致表单的呈现显示所有错误(并调用'clean()')。

有被版主删除的风险;)感谢所有评论的人以及您对新 django 开发人员的耐心。

于 2010-11-16T00:29:20.463 回答
0

如果您的 ImageFields 是可选的,那么您仍然可以验证它们(否则它们是正确的)。

然后调整您的模板以显示上传的文件名或文件上传字段,具体取决于他们是否已经上传了一个。实际上,在第一种情况下给它们两个字段可能会更好。这就是自动管理员所做的(上传字段标记为“更改”)。

于 2010-11-12T14:24:32.470 回答