Ввод европейской даты в Django Admin - PullRequest
7 голосов
/ 25 мая 2009

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

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

Но было бы здорово использовать: ДД-ММ-ГГГГ

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

Ответы [ 6 ]

9 голосов
/ 14 января 2012

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

2 голосов
/ 22 декабря 2011

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

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

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

2 голосов
/ 17 сентября 2009

На основе этой идеи я создал новый класс 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'
2 голосов
/ 26 мая 2009

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

1 голос
/ 26 мая 2009

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

0 голосов
/ 24 мая 2013

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...