2011-10-07 60 views
0

我有两个型号:如何总是对对象字段进行筛选请求

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() 

而且我想给力,当我选择照片,始终过滤显示= 1。

谢谢

回答

5

使用​​:

class DisplayedPhotoManager(models.Manager): 
    def get_queryset(self): 
     return super(DisplayedPhotoManager, self).get_queryset().filter(displayed=1) 

class Photos(models.Model): 
    objects = DisplayedPhotoManager() 
    ... 

这将覆盖标准的 “对象” 经理(这可能是危险的)。

一个更好的图案往往是:

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() 
    ... 

,并使用 '显示',而不是 '对象':

Photo.displayed.all()