【问题标题】:How do you change the order of Django's SelectDateWidget to day, month, year?如何将 Django 的 SelectDateWidget 的顺序更改为日、月、年?
【发布时间】:2011-05-26 10:03:55
【问题描述】:

这是表格:

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)

出生日期字段是这样渲染的

如何更改它以使其呈现为日、月、年?

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    从这个小部件的源代码中,我看到下拉菜单的顺序是由DATE_FORMAT 设置定义的:

        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)    
    

    例如,尝试将 settings.py 中的 DATE_FORMAT 更改为 j N, Y

    【讨论】:

    • 我快了 40 秒!耶! :-)
    • 谢谢。我还需要将 USE_L10N 设置为 False 以使其正常工作。
    【解决方案2】:

    如果您查看定义了 SelectDateWidget 的 django/forms/extras/widgets.py,则渲染函数包含此 sn-p 代码。

     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 使用 get_format('DATE_FORMAT')

    貌似DATE_FORMAT可以在settings.py中设置

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

    【讨论】:

      猜你喜欢
      • 2012-08-24
      • 2015-02-23
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2020-03-17
      相关资源
      最近更新 更多