django admin内联查询集限制

Joe*_*e J 10 django pagination inline django-forms django-admin

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

例如,我在管理员中有一个模型,其内联可以包含多达数千个相关记录.我只想显示最近的记录(比如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
Run Code Online (Sandbox Code Playgroud)

但是,我得到一个"切片一旦切片就无法过滤查询".我甚至尝试使用分页器,但得到了同样的错误.

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
Run Code Online (Sandbox Code Playgroud)

我理解为什么我会收到此错误,但我想知道是否有一种不同的方法可以限制显示的内联对象的数量.也许管理员不是设计用于处理这么多内联对象,但是觉得必须有限制管理内联记录集的方法,并防止因为内联对象太多导致浏览器/服务器崩溃的情况.任何建议都非常感谢.谢谢你的阅读.

Lef*_*que 11

试试这个:

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
Run Code Online (Sandbox Code Playgroud)