2013-12-12 95 views
2

我有一個有大約500萬條記錄的表格模型。目前django管理員對於列表顯示頁面非常慢。加載頁面可能需要一分鐘或更多時間。如何加快Django管理頁面?

有沒有辦法優化列表顯示頁面?並在10秒內加載?提前致謝。

models.py

class Notification(models.Model): 
    id = models.AutoField(primary_key=True) 
    token = models.ForeignKey(Token) 
    alert = models.ForeignKey(Alert) 
    created_at = models.DateTimeField(auto_now=True) 
    is_sent = models.BooleanField(default=False) 
    is_processed = models.BooleanField(default=False) 
    error_sending = models.BooleanField(default=False) 

    # ... 
    def __unicode__(self): 
     return u'%s' % (self.id) 

admin.py

class AppNotification(admin.ModelAdmin): 
    fields = ['is_sent','is_processed','error_sending'] 

    # 
    list_display = ('token_code','is_sent','is_processed') 

    # 
    search_fields = ('token','alert') 

    # 
    list_select_related = ('alert', 'token') 

    # 
    list_per_page = 30 

admin.site.register(Notification,AppNotification) 

的Django 1.6版

解決方案

class AppNotification(admin.ModelAdmin): 
    readonly_fields = ('token','alert') 

    fields = ['is_sent','is_processed','error_sending','token','alert'] 

    # 
    list_display = ('id','is_sent','is_processed','error_sending') 

    # 
    search_fields = ['token__token'] 

    # 
    list_per_page = 50 

admin.site.register(Notification,AppNotification) 
+0

你有解決辦法:'list_per_page'!這不行嗎?分頁是解決這些問題的最明顯方式 – karthikr

+0

不幸的是,list_per_page沒有任何區別。 這是非常緩慢的,因爲該表有超過500萬條記錄。其他django管理頁面的記錄數較少,加載速度非常快。 – ipegasus

+0

請發佈省略的通知型號代碼。 – allcaps

回答

2

該問題可能是token外鍵的加入。您可能需要從list_display刪除token_code,如果可能的話,完全刪除您list_select_related財產,

最起碼,從list_select_related屬性中刪除了'alert',因爲你甚至都不在列表視圖中使用它。

2

刪除:

list_select_related = ('alert', 'token') 

list_select_related將調用select_related。但查找所有相關的警報令牌是多餘的。

爲什麼要截斷Notification模型?

# ... <-- Maybe there is inefficient logic over here!