我正在處理零件數據庫,其中每個零件號也可以是一個裝配體,這意味着它由任意數量的其他零件組成(並且循環可以繼續,子部分由更多部分組成等)。因此,有兩個數據庫表,一個用於零件信息,另一個用於關係信息 - 與其「子部分」編號鏈接的零件編號。請記住,「程序集」,「部件」和「子部件」最終都只是「部件(有點令人困惑,但它允許更乾和多功能的數據庫)需要幫助使用來自Select_related()查詢集的數據
我目前使用的是select_related調用以跟隨在我的模型中使用的ForeignKeys。但是,因爲我的查詢可能返回的不止是單個結果(如果有多個子部分),我不能使用「get」查找,而是使用「filter」。 - 我不能按照文檔中顯示的所有基於get查詢的示例。
select_related查詢似乎正在抓取我想要的內容(基於DjangoDebugToolbar顯示的原始SQL查詢)。但是,我不知道如何調用它!從相關表中顯示值的正確語法或方法是什麼?我怎麼能循環返回的查詢集中的每個實例?從模板下面的代碼段應該最有效地顯示我想要獲得的結果。謝謝。
#----------------
#MODEL SNIPPET
#----------------
class Part(models.Model):
ISC_CHOICES = (#intentionaly removed for this question
)
part_no = models.CharField(max_length=15, primary_key=True)
description = models.CharField(max_length=40, blank=True, null=True)
isc = models.CharField(max_length=2, choices=ISC_CHOICES)
rev = models.CharField(max_length=2, blank=True, null=True)
#this table relates subparts to the part model above- basically is a manual many-to-many field
class PartAssembly(models.Model):
id = models.AutoField(primary_key=True)
part_no = models.ForeignKey(Part, related_name="partno_set")
subpart = models.ForeignKey(Part, related_name="subpart_set")
qty = models.IntegerField(max_length=3)
item_no = models.IntegerField(max_length=3)
#----------------
#VIEW SNIPPET
#----------------
def assembly_details(request, assembly_no): #assembly_no passed through URL
context_instance=RequestContext(request)
subpart_list = PartAssembly.objects.filter(part_no=assembly_no).select_related()
return render_to_response('assembly_details.html', locals(), context_instance,)
#-------------------
# TEMPLATE SNIPPET
#-------------------
{% for partassembly in subpart_list %}
# obviously, this loop doesnt return anything for my part.foo variables below
# it does work for the partassembly.bar
<tr>
<td>{{ partassembly.item_no }}</td> #EDIT: comments are correct
<td>{{ partassembly.subpart }}</td> #partassembly.subpart.part_no
<td>{{ part.description }}</td> #partassembly.subpart.description
<td>{{ part.rev }}</td> #partassembly.subpart.rev
<td>{{ partassembly.qty }}</td>
<td>{{ part.isc }}</td> #partassembly.subpart.isc
</tr>
感謝所有幫助
我試圖在最小化查詢的同時將數據調用到我的模板中,select_related似乎是解決方案。我在這裏的主要問題實際上只是不知道將相關數據表調入模板的語法。我的大部分django經驗都是簡單的數據庫交互,所以我在使用更高級的django數據庫查詢方面有點新手。 – 2011-03-07 23:38:08
這正是我需要做的。所以基本上你只需要調用queriedmodelname.foriegnkeyname.propertyofthatkey。爲什麼我無法從我不確定的文檔中獲取這些信息。我一直在嘗試雙下劃線__相關的字段查找。謝謝! – 2011-03-08 14:04:34