簡単に言えば、私はポリモーフィック モデルと、通常どおりに実行できないいくつかのクエリを使用しているため、クエリ結果を通常のリストに変換する必要があります。次に、ページネーターを使用して結果をページングします。
物事を大局的に見ると、通常は次のようにします。
instances = Model.objects.filter(field=True)
Paginator(instances, 10).page(1)
私の場合:
instances = [x for x in Model.objects.filter(field=True)]
Paginator(instances, 10).page(1)
ORM が遅延しているため、通常、ページングされると、生のクエリには OFFSET と LIMITS が含まれるため、クエリが非常に軽量になります。しかし、私の場合、クエリ結果をループしているため、実際にはすべてのインスタンスのデータベースにアクセスしてから、ページネーションを適用しています。
印刷して生のクエリを読み取ろうとしましconnection.queries
たが、ポリモーフィック モデルのクエリを読み通すのは頭痛の種です。
うまくいけば、これは django ORM の根性を知っている人にとって簡単な質問になるでしょう。
編集
なぜリストに変換する必要があるのか 知りたい人は、このリンクを見て、私の問題を探してくださいhttps://github.com/bconstantin/django_polymorphic/issues/19以下のように、ループ内のタグとフィルター:
_items = []
for tag in tags:
for item in items.filter(tags__slug = tag):
# get unique items
if item not in _items:
_items.append(item)
# sadly the following doesn't work due to polymorphic query limitation
# _items = None
# for item in items.filter(tags__slug = tag):
# _items = _items | items.filter(tags__slug = tag)