2010-08-20 50 views
1

有一个模型:Django的ORM查询:让“有很多”关系对象

class DomainPosition(models.Model): 
    domain = models.ForeignKey(Domain) 
    keyword = models.ForeignKey(Keyword) 
    date  = models.DateField() 
    position = models.IntegerField() 

    class Meta: 
     ordering = ['domain', 'keyword'] 

如何获得位置记录的模板,如果为每个域我想显示下一个表中(图表中的位置值):

+----------+--------+--------+-------+-------- 
| keyword | date1 | date2 | date3 | ... 
+----------+--------+--------+-------+-------- 
| keyword1 | 2 | 6 | 7 | ... 
+----------+--------+--------+-------+-------- 
| keyword2 | 4 | 12 | 5 | ... 
+----------+--------+--------+-------+-------- 
| keyword3 | 6 | 3 | 9 | ... 
+----------+--------+--------+-------+-------- 

其中views.py

def show_domain_history(request, domain_name): 
    domain = Domain.objects.filter(name__contains=domain_name) 
    if not domain: 
     return HttpResponseRedirect('/') 
    else: 
     # positions = ... 
     variables = RequestContext(request, { 
      'domain': domain[0].name, 
      'positions': positions, 
     }) 
     return render_to_response('history.html', variables) 

回答

0

既然你甲肝e从DomainPositionDomain的外键,您应该能够获得引用特定域domdom.domainposition_set.all()的所有域位置的集合。

然后,您可以通过在模板中遍历此域列表位置来构建您的表。

+0

而且不要忘记,当你在模板是你不需要all'后'括号。 – 2010-08-20 08:06:49

+0

我们需要“全部”吗? – 2010-08-20 11:57:42

1
def show_domain_history(request, domain_name): 
    domain = Domain.objects.filter(name__contains=domain_name) 
    if not domain: 
     return HttpResponseRedirect('/') 
    else: 
     variables = {'domain': domain } 
     return render_to_response('history.html', variables) 

现在在模板中,你可以通过这个循环为:

{% for dom in domain %} 

name: {{ dom.name }} 

{% for item in dom.domainposition_set %} 

    date: item.date 

    position: item.position 
{% endfor %} 

{% endfor %}