2012-02-23 25 views
0

我有四個型號:Django的select_related不會檢索子類的模型

Task(models.Model): 
    fields... 
BasicImage(models.Model): 
    task = models.ForeignKey(Task) 
    fields... 

VisImage(BasicImage): 
    fields... 

IRImage(BasicImage): 
    fields... 

後來我有一些代碼執行以下操作:

task = Task.objects.get() 
basicimages = task.basicimage_set.select_related().all() 
imageset1 = basicimages.filter(filter=1) 
imageset2 = basicimages.filter(filter=2) 

,並在模板中,我最終顯示,像這樣的信息:

{% for i in imageset1 %} 
    {{ i.visimage.field }} 
{% endfor %} 

{% for i in imageset2 %} 
    {{ i.irimage.field %} 
{% endfor %} 

然而,根據Django的調試工具欄(以及明顯的滯後),Django是仍然重新查詢每個.visimage和.irimage對象。 select_related如何不在照顧這個?

回答

1

模型繼承在子類模型上添加隱式的一對一字段。盡我所知,select_related不適用於反向關係。

+0

它適用於One-To-One字段https://code.djangoproject.com/ticket/7270#comment:66 – 2012-02-23 09:43:44

+0

ahhh ...我的壞..請downvot eme – goh 2012-02-23 10:31:19