我正在创建一个包含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 而不是两个输入。
那么问题来了,如何指定格式(不改变widget)?
我试图在 __init__(...) 中指定 input_formats 但它引发了:
Exception Value: can't set attribute
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"]))
请您参考如下方法:
一个简单的解决方案是简单地修改 DATETIME_INPUT_FORMATS设置。
或者,您可以根据现有的 DateTimeRangeField 创建自定义字段.
class CustomDateTimeRangeField(django_filters.RangeField):
def __init__(self, *args, **kwargs):
fields = (
forms.DateTimeField(input_formats=["%D.%m.%Y %H:%M"]),
forms.DateTimeField(input_formats=["%D.%m.%Y %H:%M"]),
)
super(CustomDateTimeRangeField, self).__init__(fields, *args, **kwargs)
从这里,您可以创建一个单独的类,或覆盖所有 DateTimeFromToRangeFilter 的 field_class。
class CustomDateTimeFromToRangeFilter(django_filters.RangeFilter):
field_class = CustomDateTimeRangeField
# or
django_filters.DateTimeFromToRangeFilter.fields_class = CustomDateTimeRangeField
