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.',})
変更が加えられたときにフォームを動的に更新したい場合(およびattr =の行き先を表示したい場合)に備えて、attrs = {'onchange':'this.form.submit()'}を残したことに注意してください。これは一部のウィジェットで最適に機能する傾向があると思いますが。フォームでは、「From」と「To」の値にアクセスし(たとえば、var = args [0] .get('To'))、「From_Time」を更新できます(args [0]['From_Time']=関数)。
次に、「From_Time」ウィジェットは、時間形式を解析する単なる栄光の読み取り専用TextInputボックスになっているため、複雑な方法のように見えます。