在django 1.11中使用SelectDateWidget清空选择

时间:2018-04-29 20:30:25

标签: python django

对于SelectDateWidget,Django文档声明如下:

  

如果不需要DateField,则SelectDateWidget将为空   选项位于列表顶部(默认情况下为---)。您可以   使用empty_label属性更改此标签的文本。   empty_label可以是字符串,列表或元组。使用字符串时   所有选择框都将使用此标签进行空选。如果   empty_label是3个字符串元素的列表或元组,即选择框   将有自己的自定义标签。标签应按此顺序排列   ('year_label','month_label','day_label')。

但是,我不清楚如何使用所需的日期字段设置空选?我认为这不是一种罕见的情况:如果没有空选择,但预先选择了默认值,可以轻松跳过所需的日期字段并使用默认值保存它而不会注意到。

有人知道怎么做吗?

2 个答案:

答案 0 :(得分:1)

我可以通过将SelectDateWidget子类化并覆盖get_context来做到这一点。

class MySelectDateWidget(SelectDateWidget):

    def get_context(self, name, value, attrs):
        old_state = self.is_required
        self.is_required = False
        context = super(MySelectDateWidget, self).get_context(name, value, attrs)
        self.is_required = old_state
        return context

此答案与GwynBleidD在Display empty_label on required selectDateWidget on Django中的线程类似,但已更新为可与Django的最新版本一起使用。

答案 1 :(得分:0)

不幸的是,没有选择SelectDateWidget的代码来执行此操作(django 2.1.4)。 我的解决方案是在客户端添加空白选项(使用jquery):

$(document).ready(function() {
  $('#select-widget-id select').each(function() {
    if(!$(this).children('[value=""], [selected]').length) {
      $(this).prepend('<option value="" selected="selected">---</option>');
    }
  });
});
相关问题