私はselect_related()クエリーセットを実行してヒットデータベースを無意識に使用しないようにしています。私の見解では約select_related()キャッシング
class Item(models.Model)
user = models.ForeignKey(User, related_name='items')
name = models.CharField(max_length=255)
region = models.ForeignKey(Region, null = True, blank = True) #django-cities
country = models.ForeignKey(Country, null = True, blank = True) #django-cities
def get_ubicacion_name(self):
if self.region:
return self.region
else:
return self.country
class Activity(models.Model)
date = models.DateField()
item = models.ForeignKey(Item, related_name='items')
:私のテンプレートで
ax = Activity.objects.select_related('item','item__region','item__country').all()[:40]
を:
{% for a in ax %}
{{ a.date }} - {{ a.get_ubicacion_name }}
{% endfor %}
デバッグ・ツールバーが表示さ43 queries in 53.87ms
のでselect_related('item','item_region','item_country')
が動作していないself.country
に当たっているので、私は持っている私のモデルでは このdefのために?シェルで
:
>>> ac = ax[0]
>>> dir(ac)
...... '_item_cache', .......
>>> dir(ac.item)
...... '_country_cache','_region_cache',.......
はあなたに感謝します。
select_related()を使用してみましたか?引数のポイントは、クエリがどのFKに続くかを制限することですが、それに従うだけですので、それは重要ではありません。さらに、select_relatedは可能な限りFKを自動的にフォローするので、FK関係(地域および国)を追うように指示する必要はありません。私はselect_relatedが__ "follow"構文でうまく動作するか確かめていません。 –
@Alex Kuhl:いいえ、OPの構文は正しいです:select_relatedは、地域と国のFKの場合である 'null = True'との関係に自動的に従いません。 –
ああ、あなたが正しいです、私はあなたの定義でnullsを逃した。 –