0

私の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ヒットを回避することは可能ですか?

4

1 に答える 1

2

with高価なクエリを 1 回実行し、それをコンテキストに保存するために使用する必要があります。

{% with item.listing as item_listing %}
   {% if item_listing %} ... {% endif %} ... etc ...
{% endwith %}
于 2012-07-28T22:24:07.397 に答える