2017-07-10 8 views
0

私はDjangoモデルに24時間フォーマットで時間を保存しようとしています。私はモデルでTimeFieldを使用しています。これまでのところ、標準の12時間形式で時間を保存しようとすると動作します。 しかし、24時間形式で時間を保存しようとすると、もう機能しなくなり、有効な時間を与えるというエラーが表示されます。TimeFieldのDjangoモデルに24時間制の軍事フォーマット時間を保存する方法

私のアプリケーションは、時間単位でクレジットを保存します。ユーザーは、消費したい時間数を支払ってそれに応じて支払います。残りのクレジットはremaining_session_creditsに保存します。ユーザーが登録すると、ユーザーは最大24の整数を入力します。つまり、ユーザーは最大24時間のクレジットしか使用できません。これが私が24の整数をTimeFieldに格納しようとしている理由です。

ここに私のコードは、これまでのところです:

マイモデルここ

session_credits = models.TimeField(blank=True, null=True) 
remaining_session_credits = models.TimeField(blank=True, null=True) 

マイビュー

def save_enrollment(request): 
try: 
    data = json.loads(request.body.decode("utf-8"), parse_float=decimal.Decimal) if request.body.decode("utf-8") else {} 
    if data.get("session_credits", None) is not None: 
     data["remaining_session_credits"] = timedelta(hours=data.get("session_credits")) 

    return success("Success!") 
except Exception as e: 
    return HttpResponse(str(e), status=400) 

data.get("session_credits")は、私は時間に変換してるの整数です。たとえば、data.get('session_credits') = 2424は時間形式で、モデルのTimeFieldに保存されます。

+0

質問にあなたのコードを追加できますか? –

+0

@RodXavier私のコードを追加しました – Mikebarson

+0

'timedelta'オブジェクトを' datetime'フィールドに割り当てています。 –

答えて

-1

24時間ミリタリースタイルのようなデータに特定のフォーマットをサポートしたい場合。情報をテキストに変換します。 Djangoのデータ形式とSqlプラットフォームのデータ形式に制限されています。しかし、ユーザーインターフェイスを制御し、データをテキスト形式で扱うときにすべての形式を実現できます。

+0

私のモデルでTimeFieldを使用する代わりに、CharFieldを代わりに使用する必要がありますか? – Mikebarson

+0

妥当性確認のためにデータを日付/時刻として保存する必要があります。しかし、その日付/時刻データがどのように表示されるかについてフロントエンドコードを変更してください。 –

+0

DjangoはPythonコードです。 Pythonコードの表示方法を変更します。日付/時刻をデータベースコードのままにします。文字列に変換するためのPythonコードはstr(DateTimeVariable)です。 Djangoは松葉杖なので、コードを書く必要はありません。それはあなたのために多くのことを行います。問題は、Pythonでそれをやっているよりも、あなたのために多くの仕事を生み出すことが好きなように、物事をしないときです。 –

1

これは、ユーザーがクレジットを「消費する」方法によって2つの選択肢があることを理解している限りです。

登録時からx時間「購読している」場合、彼の契約の有効期限が切れる時刻を保存することができます。あなたは彼が購入してその値をDateTimeフィールドに保存した時間をユーザが登録したときにこれを計算することができます。彼のサブスクリプションがすでに期限切れになっている場合、現在の時刻と照合することができます。

クレジットを「消費」するために積極的に何かを行う必要がある場合、これをどのように測定しますか?これは実装するのがはるかに難しいです。また、この場合、情報をどの程度正確に格納するかに応じて、値を整数(IntegerField)またはDurationのいずれかとして格納する方がよいでしょう。

+0

それは理にかなっています。私は 'DurationField'についてはっきりさせたいと思います。これまで私が使ったことはありませんでした.Djangoのドキュメントでは、使い方や使い方について詳しくは書かれていません。 'DurationField'はいつ使うべきですか? – Mikebarson

+0

@Mikebarson一定の期間の情報を保存する必要がある場合は、これを使用する必要があります。時間のような何かがxをする必要があった。 Usain Boltは100メートル必要ですか? 9.5秒。それはある期間です。 TimeFieldとは異なり、ある時点を保存します。何かのように:パッケージはいつ到着するのですか?午後1時。したがって、あなたの場合:どのくらいの期間、ユーザーは私のサービスを使用することができますか? 5時間14分3秒。これはある時点ではなく、一定の期間です。しかし、あなたが "クレジット"としてそれを必要とすれば、IntegerFieldはおそらくもっと良いでしょう。 – trixn

+0

さようなら!私はそれを得たと思う!ありがとう! – Mikebarson

関連する問題