据说那里 - 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来源的某个地方埋葬的。
提前多多感谢。
答案 0 :(得分:1)
在Django 1.4中,ModelForm
可以override the widgets。 modelformset_factory
以ModelForm
为参数。
我认为您可以通过使用所需的小部件定义模型表单来实现您想要的内容,然后在创建表单集时使用该模型表单。不需要向后移植。
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__
方法中设置正确的标签。