Djangoでは、モデルクラスを持っているとします。Djangoでは、クエリーセットにメソッドを追加できますか?
from django.db import models
class Transaction(models.Model):
...
次に、モデルにメソッドを追加したい場合は、合理的に複雑なフィルタを使用して、カスタムモデルマネージャを追加することができます。
class TransactionManager(models.Manager):
def reasonably_complex_filter(self):
return self.get_query_set().filter(...)
class Transaction(models.Model):
objects = TransactionManager()
そして私は行うことができます。
>>> Transaction.objects.reasonably_complex_filter()
を私はモデルから設定されたクエリの最後に連鎖させることができ、カスタムメソッドを追加することができます方法はありますか?
すなわち、私はこれを行うことができますようにカスタムメソッドを追加します。
>>> Transaction.objects.filter(...).reasonably_complex_filter()
Right、gotcha。そのブログ記事で提案されている方法が確実に機能するかどうか知っていますか?コメントは、 '__getattr__'アプローチにはいくつかの問題があることを示唆しています。 –
私はこのコードを自分で実行することはしませんでしたが、Djangoプロジェクトで使用されている '__getattr__'はこれまで同様の方法で信頼性高く使用されています。 –
記事はかなり古くなっていますが、いくつかの方法でメソッドを 'QuerySet'オブジェクトにアタッチする必要があります。 –