Python / Django - 创建后编辑模型表单

时间:2011-02-07 20:57:04

标签: python django django-forms

我有很强的PHP / ZEND背景,现在我正在学习Python / Django。在Zend中,您可以随时使用表单元素对象并对其进行编辑。这很棒,因为您可以根据需要获取表单对象并对其进行小的更改,而无需创建全新的表单对象。我试图这样做是在Django。

我有一张表格。让我们称之为投票。此表单可能需要在不同的视图方法中应用不同的窗口小部件。我不想用这么小的改变重新创建整个表单......

form = VoteForm(initial={})
## then something like
form.field.widget = newWidget

基本上, 我想在视图中创建对象后修改模型表单元素...

2 个答案:

答案 0 :(得分:4)

你回答了自己的问题:那几乎就是你怎么做的!

# tested on 1.2.3  
form = VoteForm(initial={})
form.fields['field_name'].widget = forms.HiddenInput() # make sure you call widget()

form.as_p() # shows new widget

答案 1 :(得分:1)

另一种方法是覆盖表单的 init ()方法,如:

class VoteForm(forms.Form):
    myfield = ...
    def __init__(self, hide_field=False, *args, **kwargs):
        super(VoteForm, self).__init__(*args, **kwargs)
        if hide_field:
            self.fields['myfield'].widget = ...

form = VoteForm(hide_field=True, initial={})

我个人更喜欢这种方法,将所有形式逻辑保存在一个地方而不是四处传播。假设您的表单和视图位于单独的文件中,这意味着您不必执行多个“来自django导入表单”来获取视图中的小部件。