2009-05-25 2 views
6

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

по умолчанию для администратора является: YYYY-MM-DD

Но было бы удивительным, чтобы использовать: DD-MM-YYYY

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

ответ

2

Основываясь на этой идее, я сделал новый 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) к существующим "стандартным" форматам Джанго на месте.

Использование:

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

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

Моя Джанго версия:

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

Хорошо, это решение приятно, но как я могу использовать его с AdminDateWidget? Этот виджет является частью моего MultiWidget. – alekwisnia

1

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

2

Вы должны сделать это самостоятельно на данный момент, но это довольно просто сделать с пользовательским классом полей формы, который устанавливает аргумент 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 список, так что вы можете указать несколько возможностей, и он будет пытаться их, чтобы при разборе пользовательского ввода.

+0

Я могу применить это в своих новых формах, но как я могу переопределить поле формы по умолчанию на сайте администратора? – Andor

2

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

USE_L10N = False 
DATE_FORMAT = 'd-m-Y' 
DATETIME_FORMAT = 'd-m-Y H:i' 

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

9

Существует официальный способ сделать это сейчас с момента закрытия Django ticket 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.

+1

Работала для меня. Благодаря! –

0

просто будьте осторожны, чтобы не писать его как строку, а как кортеж. например:

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

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

Смежные вопросы