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

1 投票
2 回答
599 浏览
提问于 2025-04-16 11:24

我在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

撰写回答