Django modelformset对大量数据的速度太慢

时间:2012-02-09 14:53:37

标签: django django-forms

模特:

class People(models.Model):
    first_name = models.CharField(max_length=30)
    last_name  = models.CharField(max_length=40)
    overview   = models.TextField(blank=True)
    portrait   = models.ImageField(upload_to='images/',blank=True)

    class Meta:
        unique_together = ('first_name', 'last_name',)

    def __unicode__(self):
        return u'%s %s' % (self.first_name, self.last_name)

表单/表单集:

class PeopleNameForm(forms.ModelForm):
    class Meta:
        model = People
        fields = ('first_name','last_name') 
PeopleNameFormSet = modelformset_factory(People, form=PeopleNameForm)

观点:

def people(request):
    allnames=People.objects.all()
    fs = PeopleNameFormSet(queryset=allnames)
    return render_to_response('people.html', context_instance=RequestContext(request))

现在,问题是当执行fs = PeopleNameFormSet(queryset=allnames)时,我的macbook pro(4G内存)上的100K名称大约需要5分钟,而allnames=People.objects.all()则需要时间。

我的代码出了什么问题?谢谢!

2 个答案:

答案 0 :(得分:1)

Django中的查询集是惰性的,这意味着只有在访问SQL语句或以某种方式对其进行评估时,才会在数据库上执行SQL语句。因此,您的代码没有任何问题,您可能需要考虑索引或其他一些优化。

答案 1 :(得分:1)

简短回答,没有错::)

更长的答案:.objects.all()很懒,所以只有当你(使用它)时它才被激活[https://docs.djangoproject.com/en/dev/ref/models/querysets/#当-查询集-被评估]。

尝试评估您的.all()查询,您会发现它也需要一些时间......