2010-10-06 83 views
0

所以,我有一个表格:Django表单的DateField与运行格式化

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

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

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

回答

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"