2012-02-09 5 views
1

モデルの多数の遅すぎる:ジャンゴmodelformsetデータ

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()は使用しません時間。

私のコードで何が問題になっていますか?ありがとう!

+1

は 'リスト(People.objects.allは())'どのくらいの時間がかかるん...

はあなたの.all()クエリを評価するために試してみて、あなたはそれがあまりにも時間がかかる表示されますか?クエリーセットはDjangoで怠惰です。つまり、クエリーが実行されるまで、クエリーは実行されません。それを繰り返す/それをリストに変換する/それからフォームを構成する。 –

答えて

1

Djangoのクエリセットは遅延型です。つまり、SQLステートメントは、データベースにアクセスしたり、何らかの方法で評価されているときにのみデータベース上で実行されます。だからあなたのコードに間違いはない、あなたはインデックスやその他の最適化を検討する必要があります。

1

短い答え、何が間違っているん:)

長い答え:それはあなたが(それを使用して)しているときにのみアクティブになる私の知る限りので.objects.all()は怠け者である[https://docs.djangoproject.com/en/ dev/ref/models/querysets /#when-querysets-are-evaluate]を実行します。