我有一个现有系统,我希望限制管理内联中显示的相关对象的数量。
例如,我在管理员中有一个模型,其内联可以包含多达数千个相关记录。我只想显示最近的记录(比如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
我理解为什么我会收到此错误,但我想知道是否有一种不同的方法可以限制显示的内联对象的数量。也许管理员不是设计用于处理这么多内联对象,但是觉得必须有限制管理内联记录集的方法,并防止因为内联对象太多导致浏览器/服务器崩溃的情况。任何建议都非常感谢。谢谢你的阅读。
答案 0 :(得分:10)
试试这个:
from django.forms.models import BaseInlineFormSet
class TicketNoteFormSet(BaseInlineFormSet):
def get_queryset(self) :
qs = super(TicketNoteFormSet, self).get_queryset()
return qs[:5000]
class TicketNoteAdmin(models.TabularInline):
model = models.TicketNote
formset = TicketNoteFormSet