Django处理MultipleChoiceField数据需要太长时间

时间:2016-04-01 17:32:20

标签: python django django-forms django-views multiplechoicefield

我是Django的新手,遇到了MultipleChoiceField的高POST请求时间问题。它有人员名单,我想显示地址列表,这些人住在那里的时间,但我的解决方案太慢了。

因此,如果我选择3个以上的人,加载时间变得非常大(4-5秒),但db查询只需0.5-0.7秒(如django-debug-toolbar所说),这就是为什么我没有创建任何索引(我会创造它们)。我认为长页面加载的问题是关于我的错误视图工作。同样在django-debug-toolbar的'Timer'面板中,大部分时间都需要“Request”部分。

我的models.py简化版:

pause

forms.py:

class Person(models.Model):
    name = models.CharField(max_length=300)

class House(models.Model):
    name = models.CharField(max_length=300)
    persons = DictField() # stores {person_id: time_lived} - persons, who lived here

views.py:

class PersonListForm(forms.Form):
    persons= forms.MultipleChoiceField(choices=
        ((person['id'], person['name'].lower()) for person in sorted(
        Person.objects.all().values('id', 'name'), key=itemgetter('name'))),
    label='Choice person list:'
)

我要求任何建议来优化我的应用程序,谢谢!

1 个答案:

答案 0 :(得分:0)

首先,您可以使用sql进行排序,然后对于外壳,您可以使用css进行排序。

((person['id'], person['name'].lower()) for person in sorted(
        Person.objects.all().values('id', 'name'), key=itemgetter('name'))),

BECOMES

    forms.MultipleChoiceField(choices=Person.objects.order_by('name').values('id', 'name'))

With CSS:
.lowercase {
    text-transform: lowercase;
}

对于表格保存部分,您可以发布人物和房屋的模型吗?