2011-05-26 25 views
5

Ésta es la forma:¿Cómo se cambia el orden de SelectDateWidget de Django a día, mes y año?

from django.forms.extras.widgets import SelectDateWidget 


class EntryForm(forms.ModelForm): 

    class Meta(): 
     model = Entry 

    def __init__(self, *args, **kwargs): 
     super(EntryForm, self).__init__(*args, **kwargs) 
     this_year = datetime.date.today().year 
     years = range(this_year-100, this_year+1) 
     years.reverse() 
     self.fields["date_of_birth"].widget = SelectDateWidget(years=years) 

La fecha de nacimiento de campo se representa como tal

enter image description here

¿Cómo se cambia de modo que rendirá como el día, mes y año?

Respuesta

5

A partir del código fuente de este widget veo el orden de los menús desplegables se define por DATE_FORMAT ajuste:

format = get_format('DATE_FORMAT') 
    escaped = False 
    output = [] 
    for char in format: 
     if escaped: 
      escaped = False 
     elif char == '\\': 
      escaped = True 
     elif char in 'Yy': 
      output.append(year_html) 
     elif char in 'bFMmNn': 
      output.append(month_html) 
     elif char in 'dj': 
      output.append(day_html)  

tratar de cambiar DATE_FORMAT en settings.py a j N, Y por ejemplo.

+0

se me adelantó. :) –

+1

¡Soy 40 segundos más rápido! ¡Hurra! :-) –

+4

Gracias. También necesité establecer USE_L10N en False para que funcione. – Neil

1

Si mira en django/forms/extras/widgets.py donde se define SelectDateWidget, la función de renderizado contiene este fragmento de código.

90   output = [] 
91   for field in _parse_date_fmt(): 
92    if field == 'year': 
93     output.append(year_html) 
94    elif field == 'month': 
95     output.append(month_html) 
96    elif field == 'day': 
97     output.append(day_html) 
98   return mark_safe(u'\n'.join(output)) 

_parse_date_fmt utiliza get_format('DATE_FORMAT')

Parece que DATE_FORMAT se pueden establecer en el settings.py

https://docs.djangoproject.com/en/dev/ref/settings/#date-format

Cuestiones relacionadas