私のdjangoコードは、まったく同じクエリでデータベースを頻繁に呼び出すことに気づきました。
ページに表示したり評価したりするために実際にデータが必要なときに、dbヒットが発生することを理解しています。ただし、私のテンプレートコードは次のようになります。
レンプレート:
{% if item.listing %}
{{ item.name }} text <strong>{{ item.listing|lowestprice }}</strong> more text
{% else %}
{{ item.name }} even more text
{% endif %}
....
{% for listed_item in item.listing %}
....
{% endfor %}
カスタムフィルター:
def lowestprice(value):
try:
val = unicode(value[0].price) + unicode(value[0].symbol)
return val
except:
return "not available"
このコードは私のデータベースに3回ヒットします。最初はテンプレート{% if .. %}
で、2番目はカスタムフィルターで、3番目は{% for %}
ループです。
リストは私のモデルクラスのメソッドであり、非常に高価な結合を含む生のSQLクエリセットを返します。
def listing(self):
return Universe.objects.raw("ONE HELL OF A QUERY")
コードを減らしてデータベースに1回だけヒットさせるにはどうすればよいですか?
編集:with
作品を使用していますが、カスタムフィルターでのdbヒットを回避することは可能ですか?