我认为它是首选,因为它在代码中看起来更干净。您也可能对强调的内容读得太多了,因为好处或差异并没有那么大。也就是说,在我自己实施事情时,我确实使用了建议的方法。
考虑以下模型(仅用于说明目的):
class Vehicle(models.Model):
wheels = models.IntegerField()
color = models.CharField(max_length=100)
在您的应用程序中,经常需要获取所有汽车、所有摩托车或任何类型的车辆。为了保持干燥,您需要某种标准形式的检索此数据。通过使用类方法,您将获得以下信息:
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
管理器。