2013-01-31 51 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