【问题标题】:Adding the current date as selected within custom widget添加在自定义小部件中选择的当前日期
【发布时间】:2016-08-17 08:56:12
【问题描述】:

我创建了一个自定义小部件,它将通过选择选项保存日期 + 时间。 现在每个月、日、年、小时和分钟都有自己的选择框。

我尝试了许多不同的方法来让这些选择框自动在其中包含日期和当前时间。这个 Evan 是否可以通过我编写自定义小部件的方式实现?

Bellow 是初始化表单的类,

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

无论如何我可以将值设置为当前日期吗?

谢谢你

【问题讨论】:

    标签: django django-models django-forms django-views


    【解决方案1】:

    来自 Django docs:

    小部件是 Django 对 HTML 输入元素的表示。小部件处理 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      相关资源
      最近更新 更多