コードがきれいに見えるので、好ましいと思います。利点や違いはそれほど大きくないため、強調を少し読みすぎている可能性もあります。そうは言っても、自分で物事を実装するときは、提案されたアプローチを使用します。
次のモデルを検討してください (純粋に説明目的のため)。
class Vehicle(models.Model):
wheels = models.IntegerField()
color = models.CharField(max_length=100)
アプリケーションでは、すべての車、すべてのオートバイ、またはあらゆる種類の車両を取得する必要が生じることがよくあります。物事を DRY に保つには、このデータを取得するための標準的な形式が必要です。クラス メソッドを使用すると、次のようになります。
class Vehicle(models.Model):
#(...)
@classmethod
def cars(cls):
return Vehicle.objects.filter(wheels=4)
cars = Vehicle.cars()
green_cars = Vehicle.cars().filter(color='green')
マネージャーを作成すると、次のようになります。
class CarManager(models.Manager):
def get_query_set(self):
return super(CarManager, self).get_query_set().filter(wheels=4)
class Vehicle(models.Model):
#(...)
car_objects = CarManager()
cars = Vehicle.car_objects.all()
green_cars = Vehicle.car_objects.filter(color='green')
私の意見では、特に物事がより複雑になると、後者の方がきれいに見えます。モデル定義が煩雑になるのを防ぎ、デフォルトのobjects
マネージャーを使用するのと同様のことを維持します。