Django admin会导致一个模型的高负载

时间:2010-05-21 12:48:21

标签: django django-models django-admin

在我的Django管理员中,当我尝试查看/编辑来自某个特定模型类的对象时,内存使用情况和CPU会发出警报,我必须重新启动服务器。我可以很好地查看对象列表,但是当我点击其中一个对象时会出现问题。其他型号都很好。在代码中使用对象(即创建和显示)是可以的,只有在我尝试使用管理界面查看对象时才会出现问题。这堂课甚至没有特别的异国情调:

class Comment(models.Model):
    user = models.ForeignKey(User)
    thing = models.ForeignKey(Thing)
    date = models.DateTimeField(auto_now_add=True)
    content = models.TextField(blank=True, null=True)
    approved = models.BooleanField(default=True)

    class Meta:
        ordering = ['-date']

有什么想法吗?我很难过。我能想到的唯一原因可能是thing是一个非常大的对象(几kb),但据我所知,它会在需要之前加载(正确吗?)。

1 个答案:

答案 0 :(得分:5)

这不是Thing对象有多大的问题,而是数据库中有多少。这是因为对于ForeignKey,默认情况下Django的管理员会为您提供一个包含所有现有项目的下拉列表。如果你有很多很多,那么Django将加载它们以填充该列表。用户也是如此。

最好的方法是将违规字段添加到ModelAdmin子类中的raw_id_fields。这将使用弹出查找窗口将表示更改为id的简单文本字段。