クエリをランダム化する必要があるカスタム マネージャーを作成しました。
class RandomManager(models.Manager):
def randomize(self):
count = self.aggregate(count=Count('id'))['count']
random_index = random.randint(0, count - 1)
return self.all()[random_index]
最初にマネージャーで定義されたメソッドを使用すると、問題なく動作します。
>>> PostPages.random_objects.randomize()
>>> <PostPages: post 3>
既にフィルター処理されたクエリをランダム化する必要があります。マネージャーとチェーン内のメソッドを使用しようとすると、エラーが発生しました。
PostPages.random_objects.filter(image_gallary__isnull=False).randomize()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/home/i159/workspace/shivaroot/shivablog/<ipython-input-9-98f654c77896> in <module>()
----> 1 PostPages.random_objects.filter(image_gallary__isnull=False).randomize()
AttributeError: 'QuerySet' object has no attribute 'randomize'
フィルタリングの結果はモデル クラスのインスタンスではなく、django.db.models.query.QuerySet
であるため、それぞれ my manager と method はありません。
チェーン クエリでカスタム マネージャーを使用する方法はありますか?