如何在Django-filter表单中更改日期时间格式?

时间:2017-08-03 15:17:57

标签: python django django-forms django-filter django-widget

我正在创建一个包含filter范围选择的datetime。我希望用户能够以这种格式输入日期:24.08.2017 17:09

从文档中,可以指定窗口小部件(来自django.forms),窗口小部件可以指定属性input_formats

所以这将是一个解决方案:

datetime_range = django_filters.DateTimeFromToRangeFilter(method='datetime',
                 label=u'Čas od do',widget=forms.widgets.DateTimeInput(format="%D.%m.%Y %H:%M:%S")

问题是它使用的DateTimeFromToRangeFilter使用了两个DateTimeInput字段。因此,如果我指定窗口小部件,它会呈现一个DateTimeInput而不是两个输入。

所以问题是,如何指定格式(不更改小部件)?

我正在尝试在input_formats内指定__init__(...),但它会引发:

  

异常值:无法设置属性

def __init__(self,*args,**kwargs):
    self.base_filters['datetime_range'].field = (forms.DateTimeField(input_formats=["%D.%m.%Y %H:%M"]),forms.DateTimeField(input_formats=["%D.%m.%Y %H:%M"]))

2 个答案:

答案 0 :(得分:0)

设置此

的另一种方法
    def __init__(self,*args,**kwargs):
        self.form.fields['date__gt'].input_formats = [ '%d-%b-%Y' ]

答案 1 :(得分:0)

我正在使用django-filter == 2.0.0。我发现Django DATETIME_INPUT_FORMATS设置似乎不被接受。我基本上使用了可接受的答案,但发现还需要指定widget属性:

class ISODateTimeRangeField(django_filters.filters.RangeField):
    widget = django_filters.filters.DateTimeRangeField.widget

    def __init__(self, *args, **kwargs):
        fields = (
            DateTimeField(input_formats=['%Y-%m-%dT%H:%M:%S.%fZ']),
            DateTimeField(input_formats=['%Y-%m-%dT%H:%M:%S.%fZ']),
        )
        super(ISODateTimeRangeField, self).__init__(fields, *args, **kwargs)


django_filters.DateTimeFromToRangeFilter.field_class = ISODateTimeRangeField