2016-08-17 62 views
0

我已經創建了一個自定義小部件,其中包含選擇選項的日期+時間。 現在每月,每天,每年,每小時和每分鐘都有自己的選擇框。添加在自定義小部件中選擇的當前日期

我已經嘗試了很多不同的方法來讓這些選擇框自動將日期和當前時間放在它們中。這個Evan可能與我寫自定義小部件的方式一致嗎?

貝婁是初始化形式類,

from widgets import SelectDateTimeWidget 
class CreateEvent(forms.ModelForm): 
    class Meta: 
     model = Event 
     fields = ['title', 'start', 'end', 'description', 'category'] 
     widgets = { 

      'start': SelectDateTimeWidget(date_format= '%d/%m/%Y'), 
      'end': SelectDateTimeWidget(date_format= '%d/%m/%Y') 
     } 

自定義窗口小部件(持有其他自定義窗口小部件):

class SelectDateTimeWidget(forms.MultiWidget): 
    supports_microseconds = False 

    def __init__(self, attrs=None, date_format=None, time_format=None): 
     widgets = (SelectDateWidget(empty_label=("Year", "Month", "Day")), 
        SelectTimeWidget(use_seconds=False)) 
     super(SelectDateTimeWidget, self).__init__(widgets, attrs) 

    def decompress(self, value): 
     if value: 
      value = to_current_timezone(value) 
      return [value.date(), value.time().replace(microsecond=0)] 
     return [None, None] 

    def subwidgets(self, name, value, attrs=None): 
     if self.is_localized: 
      for widget in self.widgets: 
       widget.is_localized = self.is_localized 
     # value is a list of values, each corresponding to a widget 
     # in self.widgets. 
     if not isinstance(value, list): 
      value = self.decompress(value) 
     output = [] 
     final_attrs = self.build_attrs(attrs) 
     id_ = final_attrs.get('id') 
     for i, widget in enumerate(self.widgets): 
      try: 
       widget_value = value[i] 
      except IndexError: 
       widget_value = None 
      if id_: 
       final_attrs = dict(final_attrs, id='%s_%s' % (id_, i)) 
      output.append(widget.render(name + '_%s' % i, widget_value, final_attrs)) 
     return output 

反正我有可以將其值設置爲當前日期?

由於Ĵ

回答

0

從Django的docs

窗口小部件是一個HTML輸入element.The插件Django的表示處理HTML的呈現,以及將數據從一個GET/POST提取字典對應的部件。

因此,添加默認值,如當前日期不是小部件的用途。這是表單域的用途。如果您想將默認值添加到您的形式那麼最好通過表單域做到這一點,就像這樣:

your_field = forms.DateField(initial=datetime.date.today) 
# in case of modelForm, just override the fields you need. 

,或者當您初始化形式

form = CreateEvent(
    initial={'start': datetime.datetime.now, 'end': datetime.datetime.now} 
) 

相關文檔:providing initial values to form fieldproviding initial values to modelForm

相關問題