2010-07-23 65 views
3
queryObj = Rating.objects.select_related(
    'Candidate','State','RatingCandidate','Sig','Office','OfficeCandidate').get(
     rating_id = ratingId, 
     ratingcandidate__rating = ratingId, 
     ratingcandidate__rating_candidate_id = \ 
      officecandidate__office_candidate_id) 

这一行给了我一个错误。我试图获得许多不同的表,通过主键和常规ID链接。最后的选择是问题:用django连接表格

ratingcandidate__rating_candidate_id = officecandidate__office_candidate_id. 

我需要跳过来获取所有数据。

回答

12

我想获得许多不同的表,通过主键和常规ID链接。

不要试图“加入”表。这不是SQL。

你必须做多个获取从许多不同的表中获取数据。

不要担心select_related,直到你可以证明你有一个瓶颈。

只需根据需要从各个类中执行各种GET。

让我们关注候选人和评级。

class Rating(Model): 
    ... 

class Candidate(Model): 
    rating = Models.ForeignKey(Rating) 

这样做。

r = Rating.objects.get(id=rating_id) 
c = r.candidate_set.all() 

这将获得评级和所有具有该评级的候选人。这实际上是一个SQL连接:它是两次抓取。在Django ORM中,尽可能简单地编写两个提取。让Django(和你的数据库)为你缓存一些东西。

要在模板表单的单行中显示多个表格的元素,请执行此操作。

在视图:

r = Rating.objects.get(id=rating_id) 
return render_to_response(some_form, { 'rating':r }) 

在模板:

Rating: {{rating}}. Candidates: {% for c in rating.candidate_set.all %} {{c}} {%endfor%} 

等等

你简单的 “导航”,在你的模板来显示所要求的信息的对象之一。

+1

我不包括我需要从值的表中的其余部分。一旦我创建了所有对象并拥有所有不同的数据,我将如何合并它并将其输出为行? – atomical 2010-07-23 16:13:52

+0

如果我有一个表中有多个条目与评估对象的返回值相匹配,那么获取整个表并将其放入模板是可以接受的? – atomical 2010-07-23 17:18:25

+0

@atomical:除了获取多个条目并将其放入模板中,您还能做什么?你是否**不会显示多个条目?我不明白这个问题。 – 2010-07-23 17:19:53

1

您不能在表达式的右侧使用双下划线语法。如果您需要在右侧引用字段名称,使用F()功能:

ratingcandidate__rating_candidate_id = F('officecandidate__office_candidate_id') 
+0

那么这是一种连接形式吗? – atomical 2010-07-23 17:22:40

+0

否。这是一个查询字符串,用于查找与您的所有条件匹配的评分对象。 Django的ORM中没有“加入”。 – 2010-07-23 17:42:59