9
我有一個現有的系統,我正在尋求限制管理內聯中顯示的相關對象的數量。django admin內聯查詢集限制
例如,我有一個管理模型,內聯可以有多達數千個相關記錄。我只想顯示最近的記錄(比如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
不過,我得到一個「無法一次過濾網片已經採取的查詢」。我甚至嘗試使用paginator,但得到相同的錯誤。
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
我明白爲什麼我收到此錯誤,但我不知道是否有一種不同的方法,讓我來限制內嵌顯示對象的數量。也許管理員沒有設計用於處理這些內聯對象,但是覺得必須有辦法限制管理內聯記錄集,並防止瀏覽器/服務器因內嵌對象過多而崩潰的情況。任何意見非常感謝。謝謝你的閱讀。
該formset代碼只是假定get_queryset將每次返回相同的查詢集對象和該查詢集將有DB結果緩存。隨後BaseModelFormSet的get_queryset顯式地將QS實例保存在self上。如果你重寫這個方法,並且你不需要數千分貝的查詢,你將需要做同樣的事情。 – 2015-05-19 13:23:30