DateFieldのあるフォームがあります。既存の日付値は、次のようにレンダリングされるようにフォーマットされています。
2009-10-03
次のようにフォーマットするにはどうすればよいですか。
03.10.2009
このようにレンダリングするウィジェットを見つけましたが、検証では、そのときに入力した値が許可されません。
DateFieldのあるフォームがあります。既存の日付値は、次のようにレンダリングされるようにフォーマットされています。
2009-10-03
次のようにフォーマットするにはどうすればよいですか。
03.10.2009
このようにレンダリングするウィジェットを見つけましたが、検証では、そのときに入力した値が許可されません。
したがって、最適なフォーマット ソリューションは "." です。
{{field.value.day|stringformat:"02d"}}.{{field.value.month|stringformat:"02d"}}.{{field.value.year}}
24.05.2010を取得するには
出力値として25.5.2010を取得しないように stringformat:"02d" を追加しました。
アイデアを得るために、フィールドの完全なコードを投稿します。
<input class="form-control" data-inputmask="'mask':'99.99.9999'" data-toggle="masked" name="{{field.html_name}}" placeholder="{{ field.label }}" {% if field.field.required %}required=""{% endif%} type="text" value="{{field.value.day|stringformat:"02d"}}.{{field.value.month|stringformat:"02d"}}.{{field.value.year}}" " >
主に、更新 (モデル) フォーム (UpdateView クラス) の既存のインスタンスの日付値にこの書式設定を使用しました。
このソリューションは、フォーマットを満たさない場合、更新フォームを送信するときに失敗する可能性があります
これは、カスタムのローカル設定を settings.py ファイルに追加することによって行われます: 最も重要な部分はDATE_INPUT_FORMATS タプルです
..
..
USE_L10N = True
..
DATE_INPUT_FORMATS = (
'%d.%m.%Y', '%d.%m.%Y', '%d.%m.%y', # '25.10.2006', '25.10.2006', '25.10.06'
'%d-%m-%Y', '%d/%m/%Y', '%d/%m/%y', # '25-10-2006', '25/10/2006', '25/10/06'
'%d %b %Y', # '25 Oct 2006',
'%d %B %Y', # '25 October 2006',
)
DATE_FORMAT = 'j F Y'
TIME_FORMAT = 'H:i'
DATETIME_FORMAT = 'j F Y H:i'
YEAR_MONTH_FORMAT = 'F Y'
MONTH_DAY_FORMAT = 'j F'
SHORT_DATE_FORMAT = 'j N Y'
SHORT_DATETIME_FORMAT = 'j N Y H:i'
FIRST_DAY_OF_WEEK = 1
最も重要な:
このタプルでは、更新フォームの datefield の既存の値のフォーマットを定義する最初の要素の選択が重要です。
この最初の形式を使用して、UpdateViews に JavaScript 検証を適用することもできます。
django 1.6 および 1.7でテスト済み、以前のバージョンについては不明
次のようにカスタム フィールドをサブクラス化します。
class CustomDateField(forms.DateField):
def __init__(self, *args, **kwargs):
kwargs.setdefault('input_formats', ("%d.%m.%Y",))
super(CustomDateField, self).__init__(*args, **kwargs)