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.',})

注意我留在 attrs={'onchange':'this.form.submit()'} 是为了好玩,以防您想在进行更改时动态更新表单(并显示 attr= 的位置),虽然我发现这往往最适合选择小部件。在表单中,您可以访问 'From' 和 'To' 值(例如 var = args[0].get('To'))并更新 'From_Time' (args[0]['From_Time']= some function )。

其次,“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 回答