SelectTimeWidget 是基于 SelectDateWidget 的自定义小部件。我认为它不支持“只读”。我可能回答过头了,但我有一个剧本并想出了以下内容,如果你真的想这样做可能会有所帮助......
我将 SelectTimeWidget 片段放入我的代码中并更改了以下行
def __init__(self, attrs=None, hour_step=None, minute_step=None, second_step=None, twelve_hr=False):
至:
def __init__(self, attrs={'readonly':'readonly'}, hour_step=None, minute_step=None, second_step=None, twelve_hr=False):
和:
select_html = Select(choices=hour_choices).render(self.hour_field % name, hour_val, local_attrs)
select_html = Select(choices=minute_choices).render(self.minute_field % name, minute_val, local_attrs)
select_html = Select(choices=second_choices).render(self.second_field % name, second_val, local_attrs)
至:
select_html = TextInput().render(self.hour_field % name, hour_val, local_attrs)
select_html = TextInput().render(self.minute_field % name, minute_val, local_attrs)
select_html = TextInput().render(self.second_field % name, second_val, local_attrs)
当我想将值发布到表单字段中并且更加动态,能够访问表单中的值并动态更改表单时,我使用了以下表单样式。
class time_form(forms.Form):
def __init__(self, *args, **kwargs):
super(time_form, self).__init__(*args, **kwargs)
self.fields['From'] = forms.CharField(widget=forms.TextInput(attrs={'onchange':'this.form.submit()'}))
self.fields['To'] = forms.CharField(widget=forms.TextInput(attrs={'onchange':'this.form.submit()'}))
self.fields['From_Time'] = forms.TimeField(widget = SelectTimeWidget())
在视图中,我设置了值以查看它的外观:
form = time_form({'From_Time':'12:34:56 P.M.',})
注意我留在 attrs={'onchange':'this.form.submit()'} 是为了好玩,以防您想在进行更改时动态更新表单(并显示 attr= 的位置),虽然我发现这往往最适合选择小部件。在表单中,您可以访问 'From' 和 'To' 值(例如 var = args[0].get('To'))并更新 'From_Time' (args[0]['From_Time']= some function )。
其次,“From_Time”小部件现在只是一个美化的只读 TextInput 框,它可以解析时间格式,因此看起来很复杂。