djangoでToDoリストを作成しています。私はいくつかのプロパティを持つモデルを持っています:Djangoの動的フィールド計算
class Action(models.Model):
name = models.CharField("Action Name", max_length=200, unique = True)
slug = models.SlugField(max_length=100, blank=True)
complete = models.BooleanField(default=False, verbose_name="Complete?")
effort = models.IntegerField("Effort Level", choices = LEVELS, default = 3)
importance = models.IntegerField("Importance", choices = LEVELS, default = 3)
enjoyment = models.IntegerField("Enjoyment", choices = LEVELS, default = 3)
days_to_expiration = models.IntegerField("Days to Expiration", choices = DAYS_TO_EXPIRATION, default = 7)
reset_date = models.DateField("Date of Action Reset", blank=True, null=True)
私は優先度に基づいてソートしたいです。私は次のように優先度を定義します:
priority = (1 + (today's date - reset_date)/days_to_expiration) * importance
これは、タスクがどのように「遅れている」かに基づいて重要性を拡大します。
ここで不完全なアクションのリストを取得すると、各アクションアイテムの優先度数を計算できますが、同じ数字を複数回計算することになるので効率的ではありません。私はモデルに新しいフィールドを定義することができます。
priority = models.DecimalField("Priority", max_digits=4, decimal_places=2, blank = True, null = True)
とタスクごとに新しい優先順位を計算するために一日一回実行する機能をスケジュールします。
しかし、優先度の計算をモデルに直接プログラムすることができるかどうかを知りたいと思います。したがって、アクションモデルの優先順位フィールドは、設計によって必然的に重要な機能と日々の息抜きの機能です。これは、重要度、days_to_expiration、およびtodayの日付の値を使用して動的に更新されます。そうすれば、優先度はいつでも自動的に計算されます。これは可能でしょうか?
これは実際に問題を解決するとは思わない。毎回 '優先度 'を計算しています。 –
それはOPが望んでいるようです: "その方法は、優先度はいつでも私が必要なときに自動的に計算されます。 –
これに言及しましたので、isbadawiのポイントは同じであることがわかります。厳密には必要でない場合、優先順位は複数回計算されます。しかし、これは私が想像していたアイデアでした。 –