次のようないくつかの django コードがあります。さまざまなオブジェクトをフィルタリングして、フィルタ結果の総数を取得しようとしています。そして、これらの数値を html ページに渡します。HTMLページでは、これらの合計数を表示するだけです。それで全部です。
ただし、ユーザーがこのページにアクセスすると、速度が非常に遅くなります。プログラムを高速化できるコードの改善は見られません。スピードアップするためのコードに関する提案はありますか、それとも私にできることはサーバーをアップグレードすることだけですか?
データベースにこれらのテーブルのビューまたはインデックスを作成することを考えていました。ただし、djangoでそれを行う方法についての理想はありません。データベースで直接行うこともできますが、djangoからデータベースのビューにアクセスするにはどうすればよいですか?
try:
p_r = P.objects.get(p_id=rec_id, f__f_id=f_id, d__n=d)
s = S.objects.get(r=p_r)
except S.DoesNotExist:
s = None
except S.MultipleObjectsReturned:
s = S.objects.filter(r=p_r)
try:
b = B.objects.filter(r=p_r)
except B.DoesNotExist:
b = None
bu = {}
if b != None and len(b) > 0:
bu['count'] = len(b)
try:
a = A.objects.filter(r=p_r)
except A.DoesNotExist:
a = None
an = {}
if a != None and len(a) > 0:
an['count'] = len(a)
try:
ar = AR.objects.filter(r=p_r)
except AR.DoesNotExist:
ar = None
ad = {}
if ar != None and len(ar) > 0:
ad['count'] = len(ar)
try:
c = C.objects.filter(r=p_r)
except C.DoesNotExist:
c = None
co ={}
if c != None and len(c) > 0:
co['count'] = len(c)
try:
p_e = []
ev = E.objects.all()
for e in ev:
if e.r_o.p_id == rec_id and e.r_o.record.f.f_id == f_id:
patient_events.append(e)
except E.DoesNotExist:
ev = None
ph = {}
if p_e and len(p_e) > 0:
ph['count'] = len(p_e)
Log().add(request, "View", "I", 'pr', p_r.id)
response_dict.update ({'record': p_r,
'summary': s,
'bu': bu,
'an': an,
'ad': ad,
'co': co,
'ph': ph,
'p_id': rec_id,
'f_id': f_id,
'd': d_id,
})
return render_to_response('records/detail.html',response_dict, context_instance=RequestContext(request))