2

ストレート Django では、次の方法でランダム モデル インスタンスにアクセスできます。

randinst = MyModel.objects.order_by('?')

注: これにはパフォーマンス上の問題がありますが、sqlite バックエンドでテストしたところ、最大 100000 回の試行で本当にランダムな結果が得られました。私のアプリはこれ以上の大きなパフォーマンスを必要としないため、他のバックエンドについては心配していません。

私が達成したいことは次のとおりです。クライアントがリクエストを行い/api/v1/mymodel/?limit=10、上記のスニペットを 10 回実行するのと同じように、tastypie を介して MyModel から 10 行のランダムなセットを取得します。次に、同じリクエストを行い、(確率の範囲内で) 10 個の異なるランダムな行を受け取ります。

注: 私はリクエストを試みましたが/api/v1/mymodel/?ordering='?'、その適切なバリアントはすべて役に立ちませんでした。設定も役に立たないMyModelResource.Meta.ordering = ['?']

おいしいパイで私の目標を達成する方法はありますか? 他に試すべき解決策はありますか? ありがとう。

4

1 に答える 1

5

#tastypie の厚意により回答します。

モデルのクエリセットを次のように設定します。

class MyModelResource(ModelResource): class Meta: queryset = MyModel.objects.all().order_by('?')

ここでの鍵は、objects.all().order_byだけでなく使用することですobjects.order_by

于 2012-06-06T20:20:40.907 に答える