2010-10-06 4 views
0

Alors, je forme:django forme datefield avec mise en forme d'exécution

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

et je mets les formats d'entrée et de sortie. Cependant, que se passe-t-il si je veux définir ces formats lors de l'exécution, en fonction de la préférence de format de date de mon utilisateur? Comment cela peut-il être fait?

De la façon dont cela est fait ci-dessus, le formulaire sera toujours validé par rapport au format de date européen. Même si je spécifie plus de formats autorisés, l'un d'entre eux sera le premier et sera prioritaire, ce qui signifie qu'il y aura des cas où la validation sera mal faite.

Répondre

3

Vous pouvez remplacer la méthode __init__ de la classe de formulaire pour personnaliser le input_formats et le widget. Par exemple

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() est une abstraction pour la recherche le format de date basée sur les paramètres régionaux de l'utilisateur. Il devrait retourner une chaîne de format appropriée, par exemple "%m/%d/%Y".