我正在处理零件数据库,其中每个零件号也可以是一个装配体,这意味着它由任意数量的其他零件组成(并且循环可以继续,子部分由更多部分组成等)。因此,有两个数据库表,一个用于零件信息,另一个用于关系信息 - 与其“子部分”编号链接的零件编号。请记住,“程序集”,“部件”和“子部件”最终都只是“部件(有点令人困惑,但它允许更干和多功能的数据库)需要帮助使用来自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