2009-05-25 99 views
6

Django有一個DATE_FORMAT和一個DATE_TIME_FORMAT選項,允許我們選擇在查看日期時使用哪種格式,但顯然不會讓我在編輯或添加日期時更改輸入格式Django Admin。在Django Admin輸入歐洲日期

爲admin,默認爲:YYYY-MM-DD

但將是真棒使用:DD-MM-YYYY

是這個集成在國際化的案例? 這可以改變沒有自定義模型?

回答

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的版本是:

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' 
+0

好的,這個解決方案很好,但我怎樣才能使用它與AdminDateWidget?這個Widget是我的MultiWidget的一部分。 – alekwisnia 2011-12-22 11:54:19

1

看起來像這是not yet supported,據我瞭解,所以是的,你現在必須做一些定製工作。

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是一個列表,這樣你就可以指定多個可能性,並解析用戶輸入時,它會嘗試,以便他們。

+0

我可以將其應用於我的新表單,但是,如何覆蓋管理網站中的默認表單字段? – Andor 2009-06-05 10:32:40

2

,使其禁用本地化,並設置日期格式explicite我修改設置。

9

現在有做到這一點,因爲Django ticket 6483 &發佈的Django 1.2的關閉一個正式的方式。

如果你有USE_L10N設置爲False,你應該做的是指定您settings.pyDATE_INPUT_FORMATSDATETIME_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_FORMATSDATETIME_INPUT_FORMATS設置在formats.py而不是settings.py

+1

爲我工作過。謝謝! – 2012-03-15 13:54:24

0

只要不要把它寫成一個字符串,而是寫成一個元組。 如:

DATE_INPUT_FORMATS = ('%d.%m.%Y',) 
如果你想只有一個的形式書寫日期的有效途徑

相關問題