我有一個自定義管理器。我想用它來處理相關的對象。我在文檔中找到了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()
我在兩個模型中定義的經理。如果我理解的話,'objects'就是默認管理器。看到問題編輯,我在那裏添加模型。 – I159
定義的_first_管理器成爲默認管理器,無論它是否被稱爲「objects」或不... –
Uoo hooo!其作品!很可能有一些非常愚蠢的錯誤。因爲現在沒關係。 – I159