Европейский ввод данных в Django Admin

Django имеет параметры DATE_FORMAT и DATE_TIME_FORMAT, которые позволяют нам выбирать формат, который будет использоваться при просмотре дат, но, по-видимому, не позволяют мне изменить формат ввода на дату редактирования или добавления в Django Admin.

По умолчанию для администратора: ГГГГ-ММ-ДД

Но было бы здорово использовать: DD-MM-YYYY

Является ли это интегрированным в любом случае в i18n? Можно ли это изменить без пользовательской модели?

Основываясь на этой идее, я создал новый класс db.fields EuDateField:

mydbfields.py

from django import forms from django.forms.fields import DEFAULT_DATE_INPUT_FORMATS from django.db import models class EuDateFormField(forms.DateField): def __init__(self, *args, **kwargs): kwargs.update({'input_formats': ("%d.%m.%Y",)+DEFAULT_DATE_INPUT_FORMATS}) super(EuDateFormField, self).__init__(*args, **kwargs) class EuDateField(models.DateField): def formfield(self, **kwargs): kwargs.update({'form_class': EuDateFormField}) return super(EuDateField, self).formfield(**kwargs) 

Обратите внимание, что он добавляет мой формат (например, 31.12.2007) к существующим «стандартным» форматам django на первом месте.

Применение:

 from mydbfields import EuDateField class Person(models.Model): ... birthday = EuDateField("Birthday", null=True, blank=True, help_text="") 

В моем случае это делает хороший админ, но, скорее всего, в ModelForm тоже (не пробовал).

Моя версия django:

 >>> import django >>> django.get_version() u'1.1 alpha 1 SVN-10105' 

Существует официальный способ сделать это сейчас с момента закрытия билета Django 6483 и выпуска Django 1.2.

Если у вас USE_L10N установлено значение False , то вам следует указать DATE_INPUT_FORMATS и DATETIME_INPUT_FORMATS в ваших settings.py . Вот настройки, которые я использую для этого, на основе преобразования значений по умолчанию:

 #dd/mm/yyyy and dd/mm/yy date & datetime input field settings DATE_INPUT_FORMATS = ('%d-%m-%Y', '%d/%m/%Y', '%d/%m/%y', '%d %b %Y', '%d %b, %Y', '%d %b %Y', '%d %b, %Y', '%d %B, %Y', '%d %B %Y') DATETIME_INPUT_FORMATS = ('%d/%m/%Y %H:%M:%S', '%d/%m/%Y %H:%M', '%d/%m/%Y', '%d/%m/%y %H:%M:%S', '%d/%m/%y %H:%M', '%d/%m/%y', '%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M', '%Y-%m-%d') 

Если у вас USE_L10N установлено значение True , тогда вам нужно будет использовать FORMAT_MODULE_PATH .

Например, мой LANGUAGE_CODE установлен в en-au , мой сайт называется golf , а мой FORMAT_MODULE_PATH установлен в golf.formats , поэтому моя структура каталогов выглядит так:

 golf/ settings.py ... formats/ __init__.py en/ __init__.py formats.py 

и настройки DATE_INPUT_FORMATS и DATETIME_INPUT_FORMATS находятся в formats.py вместо settings.py .

Вы должны сделать это самостоятельно на данный момент, но это довольно легко сделать с пользовательским классом полей формы, который устанавливает аргумент input_formats DateField. Это должно сделать это:

 class MyDateField(forms.DateField): def __init__(self, *args, **kwargs): kwargs.setdefault('input_formats', ("%d-%m-%Y",)) super(MyDateField, self).__init__(*args, **kwargs) 

Обратите внимание, что input_formats – это список, поэтому вы можете указать несколько возможностей, и он будет пытаться их использовать при анализе ввода пользователем.

Я изменил настройки, чтобы отключить l10n и установить формат даты explicite:

 USE_L10N = False DATE_FORMAT = 'dmY' DATETIME_FORMAT = 'dmY H:i' 

Вы также можете установить DATE_INPUT_FORMATS.

Похоже, что это еще не поддерживается , как я понимаю, так что да, сейчас вам нужно будет выполнить какую-то обычную работу.

просто остерегайтесь писать его как строку, а как кортеж. например:

 DATE_INPUT_FORMATS = ('%d.%m.%Y',) 

если вы хотите иметь только один действительный способ записи даты в форме.