12

我有一个现有系统,我希望限制管理内联中显示的相关对象的数量。

例如,我在管理员中有一个内联模型,它可以包含多达数千条相关记录。我只想显示最近的记录(比如 5K 最近的记录)。(理想情况下,可以通过内联记录进行分页,但仅限制它们对我来说就足够了。)我想避免管理页面加载 60K 内联记录的情况,这会使浏览器崩溃并给服务器带来负担。

基于以下 SO 问题,我创建了以下代码段: 如何限制查询集/要在 Django 管理站点中查看的记录?

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

我理解为什么会出现此错误,但我想知道是否有不同的方法可以让我限制显示的内联对象的数量。也许管理员不是为处理这么多内联对象而设计的,但觉得必须有办法限制管理员内联记录集并防止浏览器/服务器可能因内联对象过多而崩溃的情况。非常感谢任何建议。感谢您的阅读。

4

1 回答 1

15

尝试这个:

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
于 2013-04-30T15:27:20.573 回答