代码之家  ›  专栏  ›  技术社区  ›  Joe

Django管理导致一个模型的高负载

  •  1
  • Joe  · 技术社区  · 14 年前

    在我的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 回复  |  直到 14 年前
        1
  •  5
  •   Daniel Roseman    14 年前

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

    最好的方法是将有问题的字段添加到 raw_id_fields 在ModelAdmin子类中。这将把ID的表示形式更改为一个简单的文本字段,并弹出一个查找窗口。