Django Formset:根据值更改小部件

时间:2014-02-03 04:59:15

标签: django formset

我没有使用ModelForm。我使用instance将值传递给formset表单。无论如何,根据查询集的值动态更改字段的小部件?

我想要做的是显示表单元素或仅显示文本,具体取决于标志是否为真。

    initial=[
         {
            'name': u'Foo',
            'date1': 'Jan-13',
            'date2': 'Feb-13',
            'value1': 11.32,
            'value2': 54.13, # e.g add PlainTextWidget to this field
            # ...
         },
         {
            'name': u'Bar',
            'date1': 'Jan-13',
            'date2': 'Feb-13',
            'value1': 1,
            'value2': 54.13,
            # ...
         },
         # ...

    ]
    form = MonthlyFormset(initial = initial)

1 个答案:

答案 0 :(得分:1)

更改窗口小部件的简便方法在您的视图中:

initial=[
     {
        'name': u'Foo', ...
        'value2': 54.13, # e.g add PlainTextWidget to this field
        # ...
     },
     {
        'name': u'Bar', ...
        'value2': 54.13,
        # ...
     },
     # ...

]

formset = MonthlyFormset(initial = initial )

for form in formset:
    #check for flag:
    if form.fields['name'].initial = u'Bar':
        #changing widget
        form.base_fields['name'].widget = PlainTextWidget()

我还没有测试过这段代码,请回复一下评论。此外,我不确定是什么PlainTextWidget,我希望这将是您编写的自定义小部件。