模特:
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()
则需要时间。
我的代码出了什么问题?谢谢!
答案 0 :(得分:1)
Django中的查询集是惰性的,这意味着只有在访问SQL语句或以某种方式对其进行评估时,才会在数据库上执行SQL语句。因此,您的代码没有任何问题,您可能需要考虑索引或其他一些优化。
答案 1 :(得分:1)
简短回答,没有错::)
更长的答案:.objects.all()
很懒,所以只有当你(使用它)时它才被激活[https://docs.djangoproject.com/en/dev/ref/models/querysets/#当-查询集-被评估]。
尝试评估您的.all()
查询,您会发现它也需要一些时间......