Skip to main content
 首页 » 编程设计

python之Django admin list_display 使用外键异常缓慢

2025年05月04日40zhoujg

Django 1.2.5 python :2.5.5

我的运动模特管理列表速度非常慢(400 条记录需要 5 分钟)。它会在一秒钟左右返回,直到我们得到 400 场比赛、50 支奇数球队和 2 项运动。

我已经以糟糕的方式修复了它,所以我想看看以前是否有人见过这个。我的应用程序如下所示:

models: 
 
Sport( models.Model ) 
    name 
 
Venue( models.Model ) 
    name 
 
Team( models.Model ) 
    name 
 
Fixture( models.Model ) 
    date 
    sport = models.ForeignKey(Sport) 
    venue = models.ForeignKey(Venue) 
 
TeamFixture( Fixture ) 
    team1 = models.ForeignKey(Team, related_name="Team 1") 
    team2 = models.ForeignKey(Team, related_name="Team 2") 
 
 
admin: 
 
TeamFixture_ModelAdmin (ModelAdmin) 
    list_display = ('date','sport','venue','team1','team2',) 

如果我从 list_display 中删除任何外键,那么它很快。一旦我添加任何外键然后变慢。

我通过使用非外键修复了它,但在模型初始化中计算它们,所以这有效:

models: 
 
TeamFixture( Fixture ) 
    team1 = models.ForeignKey(Team, related_name="Team 1") 
    team2 = models.ForeignKey(Team, related_name="Team 2") 
    sport_name = "" 
    venue_name = "" 
    team1_name = "" 
    team2_name = "" 
 
    def __init__(self, *args, **kwargs): 
        super(TeamFixture, self).__init__(*args, **kwargs) 
 
        self.sport_name = self.sport.name 
        self.venue_name = self.venue.name 
        self.team1_name = self.team1.name 
        self.team2_name = self.team2.name 
 
admin: 
 
TeamFixture_ModelAdmin (ModelAdmin) 
    list_display = ('date','sport_name','venue_name','team1_name','team2_name',) 

所有其他模型的管理都很好,目前有几千条记录,实际站点中的所有 View 都运行良好。

请您参考如下方法:

这让我发疯。 list_select_related 设置为 True,但是在 list_display 中向 User 添加外键会在管理中生成每行一个查询,这会使列表变慢。 Select_related 为 True,因此 Django 管理员不应在每一行上调用此查询。 这是怎么回事?