Django有一个DATE_FORMAT和DATE_TIME_FORMAT选项,允许我们选择在查看日期时使用哪种格式,但显然不允许我在编辑或添加Django Admin时更改日期的输入格式。
管理员的默认值为:YYYY-MM-DD
但是使用会很棒:DD-MM-YYYY
在i18n中是否集成了这个? 没有自定义模型可以更改吗?
答案 0 :(得分:9)
自Django ticket 6483&关闭以来,现在有一种正式的方法可以做到这一点。发布Django 1.2。
如果您将USE_L10N
设置为False
,那么您应该在settings.py
中指定DATE_INPUT_FORMATS
和DATETIME_INPUT_FORMATS
。以下是我使用的设置,基于转换默认值:
#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 :(得分:2)
您现在必须自己这样做,但使用自定义表单字段类来设置DateField的input_formats参数非常容易。这应该这样做:
class MyDateField(forms.DateField):
def __init__(self, *args, **kwargs):
kwargs.setdefault('input_formats', ("%d-%m-%Y",))
super(MyDateField, self).__init__(*args, **kwargs)
请注意,input_formats是一个列表,因此您可以指定多种可能性,并在解析用户输入时按顺序尝试它们。
答案 2 :(得分: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)添加到现有的“标准”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'
答案 3 :(得分:2)
我修改了设置,以便禁用l10n并设置日期格式explicite:
USE_L10N = False
DATE_FORMAT = 'd-m-Y'
DATETIME_FORMAT = 'd-m-Y H:i'
您也可以设置DATE_INPUT_FORMATS。
答案 4 :(得分:1)
看起来这是not yet supported,据我所知,所以是的,你现在必须做一些自定义工作。
答案 5 :(得分:0)
请注意不要将其写为字符串,而应将其作为元组。 例如:
DATE_INPUT_FORMATS = ('%d.%m.%Y',)
如果您只想在表单中使用一种有效的写日期方式。