1

チェーン可能なメソッドを使用してカスタム マネージャー クラスを開発しています。問題を抱えて。フィルタリングされたクエリをランダム化する必要があります。ランダムなレコードを取得するには、フィルタリングされた個別のレコードの数が必要です。しかし、私はそれを取得する方法がわかりません。それどころか、私はすべてのレコードのカウントを持っています。

class RandomQueryset(models.query.QuerySet):

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


class RandomManager(models.Manager):

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

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

使用:

>>> posts = PostPages.random_objects.filter(image_gallery__isnull=False).distinct()

>>> posts.randomize()

その数が現在のクエリのレコード数を超えているため、遅かれ早かれエラーが発生します。

IndexError: list index out of range
4

1 に答える 1

1

私の質問の 1 つを回答として投稿するように依頼されました。

これは、Django の組み込み count() 関数を使用する必要があるようですdocs.djangoproject.com/en/dev/ref/models/querysets

あなたのコードではその使用が見られません。

于 2011-09-22T22:23:33.803 に答える