2011-02-07 79 views
1

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

我有一个表格。让我们称它为投票。这种形式可能需要在不同的视图方法中应用不同的小部件。我不想重新创建这样一个小小的改变整个窗体...

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

基本上, 我想修改模型表单元素的对象已在内部意见后,产生...

回答

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 
+0

我试过这种方法没有成功。我有一个我想隐藏的领域。当我应用这种技术时,表单元素不会显示为隐藏。你能给我一个例子,说明你如何在django中做到这一点? (你如何使用内置的小部件?) – GregL83 2011-02-07 21:07:14

1

另一种方式是重写窗体的初始化()方法,像:

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导入表单'来获取视图中的小部件。