[解決済み] Django の ORM を使ってランダムなレコードを引き出すには?
2022-04-14 10:05:40
質問
私のサイトで紹介する絵画を表現したモデルがあります。メインページでは、そのうちのいくつかを表示したいと思います:最新のもの、最も長い間訪問されていないもの、最も人気のあるもの、そしてランダムなものです。
Django 1.0.2を使っています。
最初の3つはdjangoのモデルを使って簡単に引っ張ることができますが、最後の1つ(ランダム)は少し問題があります。もちろん、私のビューでこのようなコードにすることは可能です。
number_of_records = models.Painting.objects.count()
random_index = int(random.random()*number_of_records)+1
random_paint = models.Painting.get(pk = random_index)
これは完全にデータベースの抽象化の一部であり、モデルの中にあるべきものです。また、ここでは削除されたレコードの面倒を見る必要があります(そうすると、すべてのレコードの数は、可能なすべてのキー値をカバーしません)、そしておそらく他の多くのことがあります。
できればモデル抽象化の内部でどうにかしたいのですが、他に方法はありますか?
どのように解決するのですか?
使用方法
order_by('?')
は、運用を始めて2日目にはデータベースサーバーを停止してしまいます。よりよい方法は、次のようなものです。
リレーショナルデータベースからランダムな行を取得する
.
from django.db.models.aggregates import Count
from random import randint
class PaintingManager(models.Manager):
def random(self):
count = self.aggregate(count=Count('id'))['count']
random_index = randint(0, count - 1)
return self.all()[random_index]
関連
-
Pythonコンテナのための組み込み汎用関数操作
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
[解決済み] データ型が理解できない
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み] Pythonで "with open "を使って複数のファイルを開くにはどうしたらいいですか?
-
[解決済み] ローカルディレクトリからrequirements.txtファイルに従ってpipを使用してパッケージをインストールするにはどうすればよいですか?
-
[解決済み] 浮動小数点数の範囲内で乱数を取得するには?
-
[解決済み】DjangoのネストされたMetaクラスはどのように機能するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PicgoのイメージベッドツールをPythonで実装する
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].