クエリセットの検索に、フィールド値ではなく関数の戻り値を使用したい
解決済
回答 4
2022/04/01 13:05
質問内容

実現したいこと

お世話になっております。 オブジェクトでフィルターを掛ける際に、モデルで定義した関数の戻り値を使用したいのですが、方法はありますでしょうか?

モデルには期限を設定しており、 その残存日数はステータスによって異なるので、下記のような関数を定義しています。

ソースコード

def remainingdays(self):
	if self.is_completed:
		return (self.completed_at + dt.timedelta(days=7) - timezone.make_aware(dt.datetime.now())).days
	if self.shipped_at:
		return (self.shipped_at + dt.timedelta(days=14) - timezone.make_aware(dt.datetime.now())).days
	if self.canceled_at:
		return (self.canceled_at + dt.timedelta(days=3) - timezone.make_aware(dt.datetime.now())).days
	if self.terminated_at:
		if self.status == 80:
			return (self.terminated_at + dt.timedelta(days=7) - timezone.make_aware(dt.datetime.now())).days
		if self.status == 90:
			return (self.terminated_at + dt.timedelta(days=3) - timezone.make_aware(dt.datetime.now())).days
	if self.flag:
		return (self.found_at + dt.timedelta(days=14) - timezone.make_aware(dt.datetime.now())).days
	if self.due_date:
		return	(self.due_date - dt.date.today()).days
	return 0

自分で試したこと

この戻り値を使って、filterをかけたいのですが、 色々と探し、labda等の方法を色々と試しましたが解決が出来ず。。。

お手数ですが、ご教示を頂ければ幸いです。

回答 4
ベストアンサーを選択すると、解決済みとなります。
nodata
まだ回答がありません
回答
nodata
回答するにはログインが必要です