0
當覆蓋在通用ListView
的get_queryset
法,select_related()
方法,沒有對queryset
任何影響,對模板循環將n + 1次的SQL調用不工作:查詢集select_related覆蓋上通用的ListView get_queryset收作方法初探時
models.py:
class Bulding(models.Model):
name = models.Charfield(max_length=100)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('properties:building_detail', args=[str(self.ph.pk), str(self.id)]) ...
class Property(models.Model):
building = models.ForeignKey(Building)
def get_absolute_url(self):
return reverse('properties:property_detail', args=[str(self.ph.pk), str(self.id)])
views.py
class PropertyListView(LoginRequiredMixin, PHViewMixin, ListView):
model = Property
def get_queryset(self):
return super().get_queryset().filter(ph=self.kwargs['some_kw']).select_related('building')
property_list.html:
...
{% for p in object_list %}
<tr>
<td>{{ p.building }}</td><td><a href="{{ p.get_absolute_url }}">{{ p.name }}</a></td>>...</td>
</tr>
{% endfor %}
...
如果我刪除{{p.building}}
我得到3次SQL調用,和47它是現在,隨着Django的調試工具欄裏檢查方式。
任何幫助表示讚賞,謝謝。
埃裏克
什麼是你打算使用select_related()方法? select_related()方法是在具有FK關係時使用一個查詢一次檢索所有內容的方式。 – Jayground
的確如此,但是當訪問Building大廈外鍵 –
時,您是否可以嘗試使用select_related('building__name')來替代每個Property對象的循環中的新數據庫調用? – Jayground