2017-08-28 12 views
0

2つの日付フィールドがあり、自動的に日付を更新したい 私のコードを読んだときにもっと理解できるでしょう。 コードは、私はどのように私はそれが自分自身(更新フィールド)を更新することができます自分 によって更新されたフィールドを更新それまでは動作しません自動的にdjangoの日付フィールドを自動的に変更

STATUS_CHOICES = (
('P', 'Paid'), 
('U', 'UNPAID'), 
) 

status = models.CharField(
    max_length=1, choices=STATUS_CHOICES) 
updated = models.DateTimeField(default=datetime.now()) 
expiry = models.DateTimeField(default=datetime.now() + timedelta(days=30)) 

def save(self): 
    if(self.expiry >= self.updated): 
     self.status = default = "P" 
    else: 
     self.status = default = "U" 
     self.expiry = default=self.updated+timedelta(days=1) 

    super(Users, self).save() 
+0

「自動的に」とはどういう意味ですか?このコードをスケジュールに基づいて実行しますか? – d2718nis

+0

@ d2718nis私はユーザーページを開いて自分の日付(更新されたフィールド)を更新するまで、コードは機能しません。私はそれを自動的にしたいと思っています。今日は21-2、それ以降は21-3です。それは自動的に状態を変更します(有効期限に応じて)私は手動でファイルを更新するまで変更しません。 –

答えて

0

DateTimeFieldは、現在のフィールドを設定しますauto_now性質を持っていますオブジェクトが保存されるたびに日付が返されます。

主な質問は、どのようなイベントが保存アクションを引き起こすべきかということです。たとえば、誰かがページにアクセスするたびにモデルが更新され、必要なDateTimeFieldが更新されるように、ビューを改善することができます。一方、これはスケジュールベースで発生することが望ましいかもしれませんので、CronCeleryまたはHueyのようなものを使用してください。

+0

私は強制されているようですセロリを使う。おかげで多く –

+0

samerハッサン、あなたは大歓迎です。この回答が有用だった場合は、正しいものとしてチェックすることを忘れないでください。ありがとう! – d2718nis

0

あなたの場合、2つの選択肢があります。

  1. 現在の日付に基づいてステータスを更新する定期的に実行されるコードをいくつか作成します。
  2. ステータスをデータベースにまったく格納しないでください。 expiryフィールドのみに依存できる場合は、計算することができます。property

P.S.

あなたの質問には関係ありませんが、私にはあなたの提案があります。 DateTimeFieldのデフォルト値としてdatetime.now()の直接的な結果を決して使用しないでください。それはあなたに誤解を招き、達成したいことと同じではありません。 datetime.nowは、インポート時(サーバーの起動時)に実行され、次回の再起動時まで同じ状態を維持します。 デフォルト値をレコードが作成された正確な時刻にする場合は、defaultの値は関数の結果ではなく、毎回実行される関数である必要があります。 これは、updatedDateTimeFiled(default=datetime.now)(ブラケットなし)である必要があることを意味します。

このロジックはcreated_atまたはdate_createdというフィールドで、updatedではなく、これはあなたのロジックです。

+0

それを指摘していただきありがとうございます –

関連する問題