2013-09-26 155 views
2

給定一個FaqTopic id,我試圖得到一個回答的結果集誰回答了關於該主題的問題。我假設這至少需要兩次查詢,但我不完全確定如何去做。我的模型看起來大致像這樣:Django queryset的反向manytomany關係

class FaqTopic(models.Model): 
    name = models.CharField(max_length=50) 

class Respondant(models.Model): 
    name = models.CharField(max_length=50) 

class Answer(MediaReady): 
    text = models.TextField(blank=True) 
    respondant = models.ForeignKey(Respondant, blank=True, null=True) 

class Question(MediaReady): 
    text = models.CharField(max_length=255, blank=True) 
    answers = models.ManyToManyField(Answer, blank=True, null=True) 
    topic = models.ForeignKey(FaqTopic, blank=True, null=True) 

我可以做類似這樣:

topic = FaqTopic.objects.get(pk=topic_id) 
questions = topic.question_set.all() 

然後通過每個問題的循環,並建立了一套獨特的respondants的。但那似乎很難看。

回答

4

您可以在一個查詢中完成。這會給你一個在特定主題中回答問題的答覆者。

respondants = Respondant.objects.filter(answer__question__topic__name = name) 

或者,如果你有一個topic對象,

respondants = Respondant.objects.filter(answer__question__topic = topic) 

你可以閱讀更多的lookups that span relationships here

+0

美麗!謝謝。 – wmfox3