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

问题描述 投票:0回答:3

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

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

任何帮助将不胜感激。我已经浏览了所有我能找到的好页面,但都无济于事。

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


编辑 2010 年 9 月 15 日:

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

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

    return render( 'testing.tmpl', locals(), request )

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

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

django forms model imagefield
3个回答
1
投票

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


0
投票

如果您的 ImageFields 是可选的,那么您仍然可以验证它们(它们在其他方面是正确的)。

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


0
投票

在弄清楚如何使用 Python 调试器 (pdb) 以及在 emacs 中它“正常工作”这一事实之后,我发现我的(空)表单没有绑定。谷歌搜索绑定表单将我指向此页面:

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

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

test_form = UserProfileForm()

test_form = UserProfileForm( {} )

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

© www.soinside.com 2019 - 2024. All rights reserved.