Purpose of using a custom manager to create objects with django? -
i see in django documentation :
model instance reference : creating objects
you may tempted customize model overriding
__init__method. if so, however, take care not change calling signature change may prevent model instance being saved.
rather overriding__init__, try using 1 of these approaches:
- add classmethod on model class.
- add method on custom manager (usually preferred)
why second solution "usually preferred" ?
in situation have model b extends model a through onetoone relation, , want create method generating b object generates corresponding a object well, how "better" use custom manager suggested, given i'll not use manager other provided default manager ?
i think preferred because looks cleaner in code. might reading emphasizes bit much, benefit or difference isn't big. said, when implementing things myself use proposed approach.
consider following model (purely illustrative purposes):
class vehicle(models.model): wheels = models.integerfield() color = models.charfield(max_length=100) in application, need arises cars, or motorcycles, or whatever type of vehicle. keep things dry, want standard form of retrieving data. using class methods, you'd following:
class vehicle(models.model): #(...) @classmethod def cars(cls): return vehicle.objects.filter(wheels=4) cars = vehicle.cars() green_cars = vehicle.cars().filter(color='green') if create manager, you'll this:
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') in opinion, latter looks cleaner, when things more complex. keeps clutter out of model definitions, , keeps things similar using default objects manager.
Comments
Post a Comment