Django管理百万数据-管理页面打开时间过长



我的网站上有一百万行数据。当我想通过管理员访问此页面时,我正在等待。大概40-50秒。我做了页码20,但没有任何变化。当前默认值为100。

这是我的管理代码

@admin.register(PollVote)
class PollVoteAdmin(admin.ModelAdmin):
list_display = ['poll','referer','vote','ip', 'created_date']
ordering = ('-created_date',)
search_fields = ['ip']
raw_id_fields = ['poll']

我可以做些什么来在Admin中加快此页面的速度?

PollVote模型:

class PollVote(models.Model):
poll = models.ForeignKey(Poll,on_delete=models.CASCADE,verbose_name="Poll Name",related_name="votes")
author = models.CharField(max_length=150,blank=True,verbose_name="Username")
vote = models.TextField(verbose_name='Vote')
ip = models.GenericIPAddressField(protocol="IPv4")
cookie = models.TextField(verbose_name="Voters' Cookie")
votecount = models.IntegerField(verbose_name="Vote Count",default=1,blank=True)
created_date = models.DateTimeField(auto_now_add=True,verbose_name="Created Date")
country_code = models.CharField(max_length=10,blank=True,verbose_name="Country Code")
country = models.CharField(max_length=50, blank=True, verbose_name="Country")
city = models.TextField(max_length=50, blank=True, verbose_name="City")
vote_duration = models.FloatField(default=0, verbose_name="Vote Duration")
referer = models.TextField(verbose_name='Referer', blank=True)
def __str__(self):
return self.author
class Meta:
ordering = ['poll']

这可能是因为N+1问题,它首先检索所有PollVOte对象,然后必须进行N查询才能加载titles。

我们可以使用list_select_related[Django-doc]选项将这些添加到.select_related(…)Django-dok]项目中,然后在同一查询中提取这些项目:

@admin.register(PollVote)
class PollVoteAdmin(admin.ModelAdmin):
list_display = ['title', 'referer', 'vote', 'ip', 'created_date']
ordering = ('-created_date',)
search_fields = ['ip']
raw_id_fields = ['title']
list_select_related = ['title']

然而,最好将ForeignKey重命名为Poll模型,将Poll重命名为,而不是title,因为title将暗示为CharField

最新更新