2013-01-31 52 views
0

我在Django以下模型:Django的related_name以下向后

class Feedback(models.Model): 
    solution=models.ForeignKey(Solution, related_name='solution1') 
    idea=models.ForeignKey(Idea,null=True, blank=True,related_name='idea1') 
    idea2=models.ForeignKey(Idea, related_name='idea2') 

给出一个解决方案,我怎么可以编写一个查询将检索我已经在这个解决方案的反馈都ideas2的ID。而且我想知道它在Django中甚至是可能的。非常感谢! 我试过这样的事情,但我怎么能指定我正在寻找idea2,而不是idea1?

ideas2= Idea.objects.filter(feedback_solution1=solutionID) 

回答

2
feedbacks = list(Feedback.objects.filter(solution=solutionID).values_list('idea2__pk', flat=True)) 
ideas2 = Idea.objects.filter(pk__in=feedbacks) 

或者

feedbacks = list(Feedback.objects.filter(solution=solutionID).values_list('idea2__pk', flat=True)) 
ideas2 = Idea.objects.in_bulk(feedbacks) 

退房在Documentation的性能考虑部分。

+0

不需要明确的'list()'铸造。 'values_list(..,flat = True)'已经返回一个列表类型 – karthikr

+0

@karthikr'values_list'返回一个'ValuesListQuerySet',而不是一个列表。如果没有'list()'投射,Django将执行一个子查询,使用'list()'它将在单独的查询中获取'idea2__pk'值。 – Alasdair

+1

就像我在我的解决方案中所说的,查看性能注意事项,它解释了为什么您应该使用list() – msc