django - How to always filter on a field on objects requests -
i have 2 models :
class album(models.model): #attributes title = models.charfield(max_length=200) displayed = models.booleanfield() created_on = models.datetimefield(auto_now_add=true) class photos(models.model): #attributes title = models.charfield(max_length=500) link = models.charfield(max_length=500) album = models.foreignkey(album, unique=false, verbose_name=_('album')) def upload_path(self, filename): return 'upload/photos/%s/%s' % (self.id, filename) def upload_path_thumbnail(self, filename): return 'upload/photos/%s/%s' % (self.id, "thumnail_" +filename) thumbnail = models.imagefield(upload_to=upload_path_thumbnail) photo = models.imagefield(upload_to=upload_path) created_on = models.datetimefield(auto_now_add=true) displayed = models.booleanfield()
and want force, when select photos, filter on displayed=1.
thank
use custom manager:
class displayedphotomanager(models.manager): def get_queryset(self): return super(displayedphotomanager, self).get_queryset().filter(displayed=1) class photos(models.model): objects = displayedphotomanager() ...
this override standard "objects" manager (which can dangerous).
a nicer pattern often:
class displayedphotomanager(models.manager): def get_queryset(self): return super(displayedphotomanager, self).get_queryset().filter(displayed=1) class photos(models.model): objects = models.manager() displayed = displayedphotomanager() ...
and use 'displayed' instead of 'objects':
photo.displayed.all()
Comments
Post a Comment