2011-10-07 39 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()