0

私は単純なプロジェクトを持っていますが、それは今ではほとんど何もしません - いくつかの人の値を持つ MultipleChoiceField があり、ユーザーがいくつかの値を選択して「送信」ボタンをクリックすると、選択した人が住んでいた家を探しています。

私のデータベースには約 1.5k 人と 20k 家があります。リストから 3 人以上を選択すると (この場合、「houses」リストに約 5 ~ 6k の値があります)、処理時間が非常に長くなります (「t」変数の場合は約 5 ~ 7 秒)。

django-debug-toolbar が言うように、DB クエリには 0.7 秒しかかからず、約 95% の時間は「タイマー」パネルの「リクエスト」セクションです。だから問題は - 私は間違っているのですか?render_to_response の使い方が間違っていると思います。私のコードを最適化するために何かお勧めできますか? 私はDjangoの初心者です、ありがとう。

私の 'guess_houses.html' では、フィールドのある家のリストのみを表示します。

これが私のviews.pyです:

class HouseView(FormView):
    template_name = 'guess_houses.html'
    form_class = PersonListForm # that's my MultipleChoiceField with persons in it

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            persons_id = form.cleaned_data['persons']
            houses= []
            t1 = time()
            for id_person_dict in House.objects.all().values('id', 'persons', 'address'):
                # if persons_id and persons who lived in house got intersection element(s)
                if set(persons_id) & set(id_person_dict['persons']):
                    if id_person_dict not in houses:
                        houses.append(id_person_dict)
        return render_to_response(self.template_name, {'form': form, 'houses': houses, 't': time()-t1})
4

0 に答える 0