Django有一個DATE_FORMAT和一個DATE_TIME_FORMAT選項,允許我們選擇在查看日期時使用哪種格式,但顯然不會讓我在編輯或添加日期時更改輸入格式Django Admin。在Django Admin輸入歐洲日期
爲admin,默認爲:YYYY-MM-DD
但將是真棒使用:DD-MM-YYYY
是這個集成在國際化的案例? 這可以改變沒有自定義模型?
Django有一個DATE_FORMAT和一個DATE_TIME_FORMAT選項,允許我們選擇在查看日期時使用哪種格式,但顯然不會讓我在編輯或添加日期時更改輸入格式Django Admin。在Django Admin輸入歐洲日期
爲admin,默認爲:YYYY-MM-DD
但將是真棒使用:DD-MM-YYYY
是這個集成在國際化的案例? 這可以改變沒有自定義模型?
基於這種想法,我提出了新的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的版本是:
USE_L10N = False
DATE_FORMAT = 'd-m-Y'
DATETIME_FORMAT = 'd-m-Y H:i'
您可以設置DATE_INPUT_FORMATS還有:
>>> import django
>>> django.get_version()
u'1.1 alpha 1 SVN-10105'
看起來像這是not yet supported,據我瞭解,所以是的,你現在必須做一些定製工作。
現在你必須自己做這件事,但使用設置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是一個列表,這樣你就可以指定多個可能性,並解析用戶輸入時,它會嘗試,以便他們。
我可以將其應用於我的新表單,但是,如何覆蓋管理網站中的默認表單字段? – Andor 2009-06-05 10:32:40
,使其禁用本地化,並設置日期格式explicite我修改設置。
現在有做到這一點,因爲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
。
爲我工作過。謝謝! – 2012-03-15 13:54:24
只要不要把它寫成一個字符串,而是寫成一個元組。 如:
DATE_INPUT_FORMATS = ('%d.%m.%Y',)
如果你想只有一個的形式書寫日期的有效途徑
。
好的,這個解決方案很好,但我怎樣才能使用它與AdminDateWidget?這個Widget是我的MultiWidget的一部分。 – alekwisnia 2011-12-22 11:54:19