2013-03-25 17 views
0

這裏是我的Django代碼,Django的SelectTimeWidget只讀

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)) 

,你可以看到我做了readly文本字段的正常工作,以同樣的方式,我想打SelectTimeWidget只讀我已經試過attrs={'readonly':'readonly'}但不工作如預期。有沒有辦法解決這個問題?/

+0

爲什麼使用這樣的小部件如果你想讓它只讀?只是顯示一個文本小部件 – 2013-03-25 06:35:37

+0

嗯,但我想嘗試這種方法,以便它不會影響我的其他CSS模板... – Friend 2013-03-25 06:45:47

回答

0

SelectTimeWidget是一個基於SelectDateWidget的自定義小部件。我不認爲它支持「只讀」。我可能已經過頭了答案,但我有一齣戲,並與下面這可能幫助,如果你真的想這樣做......

I dropped the SelectTimeWidget snippet into my code上來,改變了以下行

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 = { '平變化': 'this.form.submit()'}爲如果你想在更改時動態更新表單(並且顯示attr =去哪裏),那麼它很有趣,儘管我發現這對於選擇小部件來說效果最好。在表單中,您可以訪問'From'和'To'值(例如var = args [0] .get('To'))並更新'From_Time'(args [0] ['From_Time'] =某些函數)。其次,'From_Time'小部件現在只是一個美化的只讀TextInput框,用於分析時間格式,因此看起來像是一種複雜的方式。

+0

是的,這工作:) – Friend 2013-03-26 05:18:58

0

我有我的形式禁用選擇控件,我用這個代碼只是禁用領域:

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

選擇輸入字段沒有「只讀」屬性。