Как всегда фильтровать по полю запросы объектов - PullRequest
0 голосов
/ 07 октября 2011

У меня есть две модели:

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.

Спасибо

1 Ответ

5 голосов
/ 07 октября 2011

Используйте пользовательский менеджер :

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...