Managerを使う
結論からお話しするとManager
を使用します。
もちろんこのほかにも方法はありますがこの方法が一番ベターかと。
#実装する
今回使用するmodels.pyはこちら。
models.py
class Charge(models.Model):
amount = models.DecimalField(max_digits=8, decimal_places=2)
month = models.DateField()
class Meta:
db_table = "charge"
カスタムマネージャーを追加
Charge
モデルからidを元に一つのオブジェクトを取得するメソッドを追加します。
そして次にCharge
モデルのカスタムマネージャーをモデルに追加します。
models.py
from django.core.exceptions import ObjectDoesNotExist
class ChargeManager(models.Manager):
def find(self, charge_id):
queryset = self.get_queryset()
try:
return queryset.get(pk=charge_id)
except ObjectDoesNotExist:
return None
class Charge(models.Model):
# ...
# カスタムマネージャーを追加
objects = ChargeManager()
これでCharge.objects.find("charge_id")
と書くことで実行することができます。
この方法ではManager
に複数のメソッドを持たせてそれを組み合わせてより複雑なクエリセットを作ることも可能です。
参考