私のアプリケーションは、時間の記録を扱います。モデルでは、期間を整数の分として保存します。フロント エンドでは、ユーザーが整数の分、10 進数の時間 (例: 1.5 = 90 分)、または時間と分 (例: 01:30 = 90 分) として時間を入力できるようにしたいと考えています。また、ユーザーの好みの形式 (プロファイル モジュールで設定できる) でフィールド値を表示するフォームも必要です。
ユーザーの好みを取り入れ、表示ページの各エントリに適切な形式を表示するテンプレートフィルターを設定しました(コンテキストで送信され、テンプレートタグフォーマッターを介してフィードされます)が、フォームで同じことをしたい-つまりフォームの値を適切な形式で表示し、ユーザーが 3 つの異なる形式のいずれかで時刻を入力できるようにします。
これが私が持っているものの大まかな概要です。このモデルにより、ユーザーはシステム内のさまざまなフィールドの開始状態を設定できます。
models.py:
class PreviousHours(models.Model):
user = models.OneToOneField(User)
logged_minutes_1 = models.PositiveIntegerField(default=0)
logged_minutes_2 = models.PositiveIntegerField(default=0)
logged_minutes_3 = models.PositiveIntegerField(default=0)
...
フォーム.py:
class PreviousHoursForm(forms.ModelForm):
class Meta:
model = PreviousHours
exclude = ('user')
整数分を適切な形式に変換するために、必要に応じてorformat_minutes
を呼び出すメソッドがあります。これらは適切にフォーマットされた時刻を返します。分 = 0 の場合は空の文字列を返します。文字列を受け取り、正規表現でその形式をチェックし、分を整数として返し、形式が間違っている場合は例外をスローするメソッドもあります。minutes_to_decimal_hours
minutes_to_hhmm
かなり具体的なフォーム レイアウトをテンプレートに手動で作成したため、現在、{{ form.logged_minutes_1 }}
スタイル エントリを使用して入力ボックスを適切にレンダリングしています。
これを行うには、新しいフォーム ウィジェットを作成する必要がありますか? それとも別の方法がありますか?最善のアプローチについては完全にはわかりません。