Python / Django - 创建后编辑模型表单
我在PHP / ZEND方面有很强的背景,现在正在学习Python / Django。在Zend中,你可以随时编辑一个表单元素对象。这非常好,因为你可以根据需要对表单对象进行小的修改,而不必重新创建一个全新的表单对象。我想在Django中做到这一点。
我有一个表单,叫做投票表单。这个表单在不同的视图方法中可能需要应用不同的控件。我不想因为这么小的变化就重新创建整个表单……
也就是说,
form = VoteForm(initial={})
## then something like
form.field.widget = newWidget
基本上,我想在视图中创建对象后,修改一个模型表单元素……
2 个回答
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={})
我个人更喜欢这种方法,因为它可以把所有的表单逻辑放在一个地方,而不是分散在不同的地方。假设你的表单和视图在不同的文件中,这样你就不需要在视图中多次写 'from django import forms' 来获取小部件了。
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