管理インラインに表示される関連オブジェクトの数を制限しようとしている既存のシステムがあります。
たとえば、管理者に、最大数千の関連レコードを持つことができるインラインを持つモデルがあります。最新のレコードのみを表示したいと思います (5K の最新レコードなど)。(理想的には、インライン レコードを介してページネーションを行うことができますが、それらを制限するだけで十分です。) 管理ページに 60K のインライン レコードが読み込まれて、ブラウザーがクラッシュし、サーバーに負担がかかる状況を回避したいと考えています。
次の SO の質問に基づいて、次のスニペットを作成しました: How to limit queryset/the records to view in Django admin site?
class TicketNoteAdmin(models.TabularInline):
model = models.TicketNote
def queryset(self, request):
qs = super(TicketNoteAdmin, self).queryset(request).order_by('-created')[:5000]
return qs
ただし、「スライスが取得されると、クエリをフィルター処理できません」というメッセージが表示されます。ページネーターを使用してみましたが、同じエラーが発生します。
from django.core.paginator import Paginator
class TicketNoteAdmin(models.TabularInline):
model = models.TicketNote
def queryset(self, request):
qs = super(TicketNoteAdmin, self).queryset(request).order_by('-created')
p = Paginator(qs, 5000)
page1 = p.page(1)
return page1.object_list
このエラーが発生する理由は理解していますが、表示されるインライン オブジェクトの数を制限できる別のアプローチがあるかどうか疑問に思っています。おそらく、管理者はこれほど多くのインライン オブジェクトを処理するようには設計されていませんが、管理者のインライン レコード セットを制限し、インライン オブジェクトが多すぎるためにブラウザ/サーバーがクラッシュする状況を防ぐ方法が必要だと感じています。どんなアドバイスでも大歓迎です。読んでくれてありがとう。