2017-03-17 11 views
0

DjangoフォームのDateTimeFieldの初期値にはほとんど問題がありません。django形式のDateTimeField(初期値)

私はmodels.pyで宣言を持って

class FaultForm(forms.ModelForm): 
    ... 
    date_time = forms.DateTimeField(initial=datetime.now().strftime("%Y-%m-%d %H:%M:%S"), required=False) 
    ... 

forms.py

で宣言を持って

class Fault(models.Model): 
    ... 
    # date time 
    date_time = models.DateTimeField(default=datetime.now().strftime("%Y-%m-%d %H:%M:%S")) 
    ... 

問題は、適切な時間を返しています。 私は自分のform.pyから初期/デフォルトdatetimeでデータベースにいくつかのオブジェクトを追加するとき、私はすべてのオブジェクトに対して全く同じ時間を持っています。

しかし、私はテンプレートからdatetimeオブジェクトを追加するとき、私はデータベースにあるすべてのオブジェクトのdatetimeを持っています。

日時を返すように関数に指示する必要がありますが、両方の状況でまったく同じですが、問題はおそらくフォームを生成することですか?私たちは一度だけフォームを生成するので、同じ時間がありますか?

私はフォームの初期値を使用したいので、これで何をするのか分かりませんし、テンプレートでもう一度行う必要はありません。

Ony ideas ??バグ??その他の日時関数??この小さな問題を解決するための他の方法は?

私を助けてください:)

答えて

0

あなたが機能datetime.now().strftime("%Y-%m-%d %H:%M:%S")を呼び出して、そのようdefaultを割り当てています。したがって、実行時にnow()が評価され、デフォルトとして格納されます。したがって、すべてのオブジェクトにわたって同じ日時が表示されます。 auto_now argumentを使用し、Trueに設定する必要があります。

モデル -

class Fault(models.Model): 
    ... 
    date_time = models.DateTimeField(auto_now=True) 
    ... 

フォーム -

class FaultForm(forms.ModelForm): 
    ... 
    date_time = forms.DateTimeField(initial=datetime.now(), required=False) 
    ... 
+0

:「DATE_TIME」断層モデルの形式を指定することはできません

は、この単純なポイントにdefault呼び出し可能に引数を修正するには編集可能なフィールドではありません このフィールドを無効にしようとしましたが、とにかく動作していません –

+0

フィールドを編集可能にするには、モデルフォームで 'auto_now = True'部分を削除してください。 –

+0

あなたの答えは役に立たない。あなたは私の問題を解決するためにauto_now引数を使用する必要があると私に教えてください。しかし、この引数が私に別の問題を与えるとき、私はauto_nowを削除しなければならないと教えていますか?どのように私を助けることができますか? –

0

Djangoのモデルフィールドは、コンパイル時に評価されます。上記の例では、defaultの値はとなり、と評価されます。 django.core.exceptions.FieldError::私はこのようなエラーを持って、この溶液中の

def get_now(): 
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S") 

class Fault(models.Model): 
    date_time = models.DateTimeField(default=get_now) 
+0

これはうまくいくかもしれませんが、組み込みの 'auto_now'を好むべきです。 –

+0

おそらく、それは状況に依存しており、この質問には信頼性のあることを示唆するのに十分な情報がありません。 – brianz

+0

正確には、十分な情報がないため、常に組み込みを優先する必要があります。 –