Django |这是使用render_to_response的正确方法吗?

时间:2016-04-02 13:55:06

标签: python django optimization django-views multiplechoicefield

我有一个简单的项目,现在几乎什么也没做 - 有一些Person-values的MultipleChoiceField,当用户选择一些值并点击时,#34;提交"按钮 - 我正在为那些被选中的人居住的房子进行搜索。

我的数据库中有大约1.5万人和20k房屋。如果我从列表中选择3个以上的人(在这种情况下,在' house'列表中大约有5-6k值),处理时间需要很长时间(我的&#39为5-7秒) ; t'变量)。

正如django-debug-toolbar所说,数据库查询仅需0.7秒,约95%的时间是“请求”。 '定时器'面板。所以问题是 - 我做错了什么?我认为使用render_to_response有错误的方法。你能推荐一些优化我代码的东西吗?我是Django的新人,谢谢你。

在我的猜测房子里'我只显示他们的领域的房屋清单。

这是我的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})

0 个答案:

没有答案