Как использовать настраиваемый менеджер со связанными объектами?

У меня есть собственный менеджер. Я хочу использовать его для связанных объектов. Я нашел use_for_related_fields в документации. Но он работает не так, как я:

class RandomQueryset(models.query.QuerySet):

    def randomize(self):       
        count = self.count()
        random_index = random.randint(0, count - 1)
        return self.all()[random_index]


class RandomManager(models.Manager):

    use_for_related_fields = True

    def get_query_set(self):
        return RandomQueryset(self.model, using=self._db)

    def randomize(self):
        return self.get_query_set().randomize()

Я использовал его для одной модели:

>>> post = PostPages.default_manager.filter(image_gallery__isnull=False).distinct().randomize()

И попытался сделать то же самое с объектом, связанным с m2m:

>>> post.image_gallery.randomize()

Получил ошибку:

AttributeError: 'ManyRelatedManager' object has no attribute 'randomize'

Можно ли использовать кастомный менеджер, как я это сделал? Если да, то как заставить его работать?

Изменить

Мои модели:

class ShivaImage(models.Model, ImageResizing):
    image = models.ImageField(upload_to='img')
    slide_show = models.BooleanField() 
    title = models.CharField(max_length=100)
    text = models.TextField(max_length=400)
    ordering = models.IntegerField(blank=True, null=True)

    objects = RandomManager()


class PostPages(models.Model):
    image_gallery = models.ManyToManyField(ShivaImage, blank=True,
                                       related_name='gallery',)
    # all the other fields... 

    objects = RandomManager()

41
задан coffee-grinder 5 November 2015 в 17:00
поделиться