0

フォーム.py

INPUT_FORMAT = (
('%d/%m/%Y','%m/%d/%Y')
)
class ReportDatetimeForm(forms.ModelForm):
date = forms.DateField(input_formats = INPUT_FORMAT,
widget=forms.DateInput()

class Meta:
model = Report
fields = ['date']

これは、入力を2つの異なる形式の日付として取得するフォームです。この形式で入力日付を指定する%m/%d/%Y'と、データベースに保存するときに日付と月が交換されます。これはアプリケーションに影響します。したがって、両方の入力形式を単一で保存したいつまりyyyy-mm-dd、ユーザーが入力する入力形式が何であれ、指定された形式は上記の形式で保存する必要があります。

Forms.py にカスタム関数を記述して、日付を単一の形式でデータベースに保存する方法を知りたいです。

ありがとう

4

1 に答える 1

2

データベースに格納されている実際の日付は、フィールドに入力される入力テキストとは無関係です。日付は、任意の文字列ではなく、日付オブジェクトとして保存されます。

あなたが直面している問題は、有効としてリストした 2 つの形式が、同じ入力に対して異なる日付オブジェクトを生成する場合があることです。それらはあいまいです。

ユーザーが「01/02/1990」という文字列をフォーム フィールドに入力した場合、実際の日付は? 1990 年 2 月 1 日ですか。それとも1990年1月2日ですか?特定の実装では、選択された日付は最初の形式である 2 月 1 日になります。各日付形式を順番にチェックし、日付を解析しようとします。成功した場合は、日付を作成して保存します。成功しなかった場合は、連続する各フォーマットを試行します。

単一の形式を選択するか、あいまいにならない複数の形式を選択します。JavaScript カレンダー ピッカーの使用は非常に便利で、日付のさまざまな部分に個別のテキストを入力することもできます。

あなたがすべきことは、DjangoフォームでISO8601日付形式「YYYY-MM-DD」のみを許可することです。サーバーに送信する前に (javascript を使用して) 「YYYY-MM-DD」形式に変換する限り、UI 内から、ユーザーが任意の形式で日付を入力できるようにすることができます。しかし、すべきことは、3 つの別々のテキスト入力 (日、月、年に 1 つずつ) を持つことです。

于 2013-06-18T11:09:39.557 に答える