【发布时间】:2019-02-27 07:53:43
【问题描述】:
我有一个简短的视图,但有一个复杂的查询(使用的模型来自数据库 MySQL 视图)。问题是当这个视图执行时,模板加载太慢了。 Django调试工具显示一个查询重复了1367次,但是重复查询与复杂的数据库视图查询无关。
- 有什么办法可以避免重复查询吗?
- 这是因为第二个查询造成的延迟吗?
下面是我的模板和视图代码。很抱歉没有把它们展示得太好,但这是我在 StackOverflow 上的第一篇文章。
def simbouloi_list(request, eklid):
paramorder = request.GET.get('orderoption', '')
try:
paramorder = int(paramorder)
except:
paramorder = 6 # default ταξινόμηση
selected_ekloges = Eklogestbl.objects.filter(eklid=eklid)
# επιλογή όλων των εκλ. αναμετρήσεων με visible=1 και κάνω φθίνουσα ταξινόμηση αν δεν δοθεί παράμετρος
all_ekloges = Eklogestbl.objects.filter(visible=1).order_by('-eklid')
#all_simbouloi = EklallsimbVw.objects.filter(eklid=eklid).order_by('surname', 'firstname', 'fathername')
if paramorder==1 or paramorder==6:
all_simbouloi = EklallsimbVw.objects.filter(eklid=eklid).order_by('surname', 'firstname','fathername')
elif paramorder == 2:
all_simbouloi = EklallsimbVw.objects.filter(eklid=eklid).order_by('sindiasmos', 'surname', 'firstname','fathername')
elif paramorder == 3:
all_simbouloi = EklallsimbVw.objects.filter(eklid=eklid).order_by('sindiasmos', 'toposeklogis', 'surname', 'firstname','fathername')
elif paramorder == 4:
all_simbouloi = EklallsimbVw.objects.filter(eklid=eklid).order_by( 'toposeklogis','sindiasmos','surname', 'firstname','fathername')
else:
all_simbouloi = EklallsimbVw.objects.filter(eklid=eklid).order_by('toposeklogis', 'surname','firstname', 'fathername')
context = {'all_ekloges': all_ekloges,
'selected_ekloges': selected_ekloges,
'all_simbouloi': all_simbouloi,
}
return render(request, 'Elections/simbouloi_list.html' , context)
模板:
{% extends 'Elections/base.html' %}
{% load staticfiles %}
<!-- καλούμε το base.html που προσθέτει το σταθερό Menu -->
{% block content %}
{% include 'Elections/messages.html' %}
<div class="page-header">
<h3 align="center">Υποψήφιοι Σύμβουλοι (Δημοτικοί & Τοπικοί)</h3>
</div>
<div class="row">
<div class="col-md-10 col-md-offset-1">
<form method="get" name="simbouloi">
<select name="orderoption" onchange="simbouloi.submit()">
<option value="6" {% if selected_order == 4 %}selected{%endif%}>--------Επιλογή ταξινόμησης--------</option>
<option value="1" {% if selected_order == 1 %}selected{%endif%}>Κατά Επώνυμο</option>
<option value="2" {% if selected_order == 2 %}selected{%endif%}>Κατά Συνδυασμό/Επώνυμο</option>
<option value="3" {% if selected_order == 3 %}selected{%endif%}>Κατά Συνδυασμό/Περ. Εκλογής/Επώνυμο</option>
<option value="4" {% if selected_order == 3 %}selected{%endif%}>Κατά Περ. Εκλογής/Συνδυασμό/Επώνυμο</option>
<option value="5" {% if selected_order == 3 %}selected{%endif%}>Κατά Περ. Εκλογής/Επώνυμο</option>
</select>
<input type="text" class="heighttext" id="livesearch" placeholder="live search"></input>
</form>
<div class="divmargin"> </div>
<table>
<tbody >
<tr class="noborder"> <td colspan="4"><a href="{% url 'simbouloi_add' selected_ekloges.0.eklid%}" class="top-menu"><span class="glyphicon glyphicon-plus"></span> Νέα καταχώριση</a></td></tr>
</tbody>
</table>
<div class="divmargin"> </div>
<table class="table styletd1 table-condensed table-striped table-hover">
<tbody >
<tr>
<td class="thick">Επώνυμο</td>
<td class="thick">Όνομα</td>
<td class="thick">Όν. Πατρός</td>
<td class="thick">Περιοχή Εκλογής</td>
<td class="thick">Συνδυασμός</td>
<td class="thick">Ενέργειες</td>
</tr>
{% for p in all_simbouloi %}
<tr>
<td > {{ p.surname }} </td>
<td > {{ p.firstname }}</td>
<td > {{ p.fathername }} </td>
<td > {{ p.toposeklogis }} </td>
<td > {% if p.sindiasmos is None %} {% else %} {{ p.sindiasmos }} {% endif %}</td>
<td>
<a class="btn btn-default" href="{% url 'simbouloi_edit' selected_ekloges.0.eklid p.simbid%}"><span class="glyphicon glyphicon-pencil"></span></a>
<a class="btn btn-default" href="{% url 'simbouloi_delete' selected_ekloges.0.eklid p.simbid%}"><span class="glyphicon glyphicon-minus"></span></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<br/>
<table>
<tbody >
<tr class="noborder"> <td colspan="4"><a href="{% url 'simbouloi_add' selected_ekloges.0.eklid%}" class="top-menu"><span class="glyphicon glyphicon-plus"></span> Νέα καταχώριση</a></td></tr>
</tbody>
</table>
</div>
</div>
{% endblock %}
【问题讨论】:
标签: python django optimization duplicates django-queryset