2013-12-12 65 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!