我的网站上有一百万行数据。当我想通过管理员访问此页面时,我正在等待。大概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查询才能加载title
s。
我们可以使用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
。