0

これが私のdjangoコードです。

class Fpool_Booked(forms.Form):

    From = forms.CharField(label = 'Departure Place',max_length = 30,widget=forms.TextInput(attrs={'readonly':'readonly'}),error_messages = {'required': 'Please enter From where do you want to go'})

    To = forms.CharField(label = 'Destination Place',max_length = 30,widget=forms.TextInput(attrs={'readonly':'readonly'}),error_messages = {'required': 'Please enter destination'})

    From_Time = forms.TimeField(label = 'Departure Time',widget = SelectTimeWidget(attrs={'readonly':'readonly'},twelve_hr = True))

ご覧のとおり、テキストフィールドを読み取り可能に作成しました。これは正常に機能します。同じように、SelectTimeWidgetを読み取り専用にしたいのですattrs={'readonly':'readonly'}が、期待どおりに機能しません。これを修正する方法はありますか?/

4

2 に答える 2

0

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ボックスになっているため、複雑な方法のように見えます。

于 2013-03-25T17:48:13.147 に答える
0

フォームで選択ウィジェットを無効にする必要があり、フィールドを無効にするためだけにこのコードを使用しました。

def __init__(self, *args, **kwargs):
   self.fields['field_name'].widget.attrs['disabled'] = True

選択入力フィールドには、「読み取り専用」属性はありません。

于 2015-03-31T04:12:50.230 に答える