2017-11-15 3 views
0

は、私は、ユーザーがdecimalsとしてエントリー時間にできるようにしたい:Djangoでは2つの形式でタイムエントリを許可しますか?

8.25

timeとして:

8:15

Djangoのフォームフィールドには、私は何を使うべきでしょうか?

私の考えは、forms.CharField()で、HTMLの制限がなくなり、forms.TimeField()は同じ入力を作成するということです。

フォームフィールドにはどのようなバリデータを適用する必要がありますか?

カスタムバリデーターを作成する必要があるかどうかわかりません。

答えて

0

私はclean_fieldname方法でカスタム検証とCharFieldを使用します。

class TimeForm(forms.Form): 
    user_time = forms.CharField() 

    def clean_time_field(self): 
     user_time = self.cleaned_data['user_time'] 
     if '.' in user_time: 
      hours, minutes = user_time.split('.') 
     elif ':' in user_time: 
      hours, minutes = user_time.split(':') 
     else: 
      raise ValidationError('Provide correct time') 
     return datetime.time(hour=hours, minute=minutes) 
0

は多くの可能なアプローチがあるとされている最高のものは、プロジェクト内の他の多くのものに依存します。

データベースに時間をどのように保存しますか? models.TimeField()を使用していますか?あなたは非正規化しますか?models.DecimalField()にも値を保存しますか?

テンプレートでJavaScriptを使用できますか?はいの場合は、ユーザーとのやりとりを可能にする動的フォームを使用します。たぶん、このような何か:

<label for="timeformat_switcher" 
<input type="checkbox" id="timeformat_switcher">Enter a decimal value 
</label> 

<input type="time" id="time"> 
<input type="number" id="number"><!-- make it per default in CSS hidden --> 

ユーザーがチェックボックスではJavaScriptを<input type="time">を隠し、<input type="number">を再表示チェック。 JavaScriptを使用して10進値を時刻に変換し、サーバーに送信します。

+0

これはdbに 'DecimalField'として格納されます。私は変換がサーバー側で行われることをお勧めします。 – surfer190

+0

@ surfer190 'TimeField'の代わりに' DecimalField'を使って時間を保存する理由を簡単に教えてください。 – cezar

+0

より簡単に作業できます...加算、乗算、減算がうまく機能します – surfer190

関連する問題