django使用运行时格式化表单日期字段

时间:2010-10-06 16:53:07

标签: django forms date formatting

所以,我有一个表格:

class FormBasicInfo(BasicForm):
    valid_from = forms.DateField(required=False, input_formats=('%d/%m/%Y',), widget=DateInput(format='%d/%m/%Y'))

我设置了输入和输出格式。但是,如果我想根据用户的日期格式首选项在运行时设置这些格式,该怎么办?怎么办?

上面的方式,表格将始终根据欧洲日期格式进行验证。即使我指定了更多允许的格式,其中一个将是第一个并优先考虑,这意味着将会出现验证不正确的情况。

1 个答案:

答案 0 :(得分:3)

您可以覆盖表单类的__init__方法来自定义input_formats和窗口小部件。例如,

class FormBasicInfo(BasicForm):
    ....

    def __init__(self, *args, **kwargs):
        super(MForm, self).__init__(*args, **kwargs)
        valid_from = self.fields['valid_from']
        format = look_up_format_based_on_locale()
        valid_from.input_formats = (format,)
        valid_from.widget = forms.DateInput(format=format)

其中look_up_format_based_on_locale()是根据用户的语言环境查找日期格式的抽象。它应该返回一个适当的格式字符串,比如"%m/%d/%Y"