8

DjangoにはDATE_FORMATおよびDATE_TIME_FORMATオプションがあり、日付を表示するときに使用する形式を選択できますが、Django Adminで編集または追加するときに日付の入力形式を変更できないようです.

管理者のデフォルトは次のとおりです: YYYY-MM-DD

しかし、使用するのは素晴らしいでしょう: DD-MM-YYYY

これはいずれにしても i18n に統合されていますか? これはカスタムモデルなしで変更できますか?

4

6 に答える 6

10

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

たとえば、myLANGUAGE_CODEは に設定されen-au、my サイトは と呼ばれgolf、myFORMAT_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-01-14T05:03:44.030 に答える
5

l10n を無効にして日付形式を明示的に設定するように設定を変更しました。

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

DATE_INPUT_FORMATS も設定できます。

于 2011-12-22T12:42:20.030 に答える
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はリストであるため、複数の可能性を指定でき、ユーザー入力を解析するときにそれらを順番に試行することに注意してください。

于 2009-05-26T18:28:37.333 に答える
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)

最初に既存の「標準」django形式に私の形式(たとえば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'
于 2009-09-17T08:59:25.687 に答える
1

私が理解しているように、これはまだサポートされていないようです。はい、今のところカスタム作業を行う必要があります。

于 2009-05-26T06:19:51.453 に答える
0

文字列としてではなく、タプルとして記述しないように注意してください。例えば:

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

フォームに日付を書き込む有効な方法を1つだけにしたい場合。

于 2013-05-23T22:10:38.200 に答える