Djangoのfilterとかexcludeをoverrideしたい
そういう需要があるかどうか分かりませんがfilterやexcludeをoverrideして特定のModelに対するquery発行時に必ずなんらかの処理を入れる方法です。
models.py class MyModel(models.Model): objects = ObjectsManager.as_manager() class ObjectsManager(models.QuerySet): def filter(self, *args, **kwargs): # argsとkwardsにQobjectsやdictが来ているのでそこを上手いこと処理する return super().filter(*args, **kwargs) def exclude(self, *args, **kwargs): # argsとkwardsにQobjectsやdictが来ているのでそこを上手いこと処理する return super().exclude(*args, **kwargs)
多分これでうまいこと行きます。
ちなみにこれはどんな場合でもfilterやexcludeを動かすときは必ずこのような処理が走って欲しい!!!って時専用になります。(もう今までのfilterはどこからも動きません)
filterっぽいものを作りたいときは objectsではなく違う名前で宣言してみましょう。
models.py class MyModel(models.Model): objects2 = ObjectsManager.as_manager() class ObjectsManager(models.QuerySet): def filter(self, *args, **kwargs): return super().filter(*args, **kwargs) def exclude(self, *args, **kwargs): return super().exclude(*args, **kwargs)
MyModel.objects2.filter(order='spam')
【PR】 sora tob sakana というアイドルグループのPVがとてもよいです。 今度ハイスコアガールというアニメに使われるみたいです。 この記事が役に立ったよって人は是非見ていただけると幸いです