Django 1.4模型表单集指定小部件和更改标签

时间:2013-11-16 22:54:15

标签: python django

据说那里 - https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#specifying-widgets-to-use-in-the-form-with-widgets 您只能使用Django 1.6为模型的formset指定小部件。在我们的项目中,我们使用1.4,是否有人可以指导我如何为此做出一种后退?

我的问题的第二部分是关于更改标签:

class RegularAvailDateForm( ModelForm ):

    def __init__(self, *args, **kwargs):
            super(RegularAvailDateForm, self).__init__(*args, **kwargs)
            self.fields['active'].label = DOWS[self.instance.dow]

    class Meta:
            model = AvailabilitySchedule
            fields = ('active','dow', 'hour_start', 'hour_end')
            widgets = {
                    'active' :  CheckboxInput(),
                    'dow': HiddenInput(),
                    'hour_start': NumberInput(attrs={'min': '0', 'max': '23', 'step': '1'}),
                    'hour_end': NumberInput(attrs={'min': '1', 'max': '24', 'step': '1'}),
            }

DOWS只是

DOWS = [_("Monday"),
    _("Tuesday"),
    _("Wednesday"),
    _("Thursday"),
    _("Friday"),
    _("Saturday"),
    _("Sunday"),
    ]

请参阅 - 我更改__init__方法中的标签,那么模型表格集的模拟是什么?我认为答案是在Django来源的某个地方埋葬的。

提前多多感谢。

1 个答案:

答案 0 :(得分:1)

在Django 1.4中,ModelForm可以override the widgetsmodelformset_factoryModelForm为参数。

我认为您可以通过使用所需的小部件定义模型表单来实现您想要的内容,然后在创建表单集时使用该模型表单。不需要向后移植。

class RegularAvailDateForm(ModelForm):
    class Meta:
        model = AvailabilitySchedule
        fields = ('active','dow', 'hour_start', 'hour_end')
        widgets = {
            'active' :  CheckboxInput(),
            'dow': HiddenInput(),
            'hour_start': NumberInput(attrs={'min': '0', 'max': '23', 'step': '1'}),
            'hour_end': NumberInput(attrs={'min': '1', 'max': '24', 'step': '1'}),
        }

FormSet = modelformset_factory(AvailabilitySchedule, RegularAvailDateForm)

问题的第二部分也是如此。不要深入研究formset代码来尝试设置模型表单的标签。只需通过modelformset_factory模型表单,即在__init__方法中设置正确的标签。