Django: implementare JOIN usando Django ORM?

Ho un Q & A tipo di sito costruito in Django con i seguenti modelli:

class Question(models.Model): title = models.CharField(max_length=70) details = models.TextField() class Answer(models.Model): question_id = IntegerField() details = models.TextField() 

Devo mostrare una domanda specifica insieme alle sue risposte. Normalmente avrei bisogno di 2 query per farlo:

 Question.objects.get(id=1) Answer.objects.get(question_id=1)[:10] 

Spero di recuperare tutto usando una query. In MySQL sarebbe:

 SELECT * FROM Question JOIN Answer ON Question.id=Answer.question_id WHERE Question.id=1 LIMIT 10 

C’è comunque che potrei farlo attraverso l’ORM di Django? Sarebbe extra() aiuto extra() in questo caso?

    Questo è esattamente ciò che select_related () fa. L’unico risultato è che devi iniziare con il modello Risposta, piuttosto che con Domanda, ma il risultato è lo stesso:

     answers = Answer.objects.filter(question_id=1).select_related() 

    Ora ogni object risposta ha un attributo ‘domanda’ pre-recuperato, e accedervi non colpirà ancora il db.

    Prendi in considerazione l’utilizzo di models.ForeignKey(Question) invece di question_id = IntegerField() .

      class Question(models.Model): title = models.CharField(max_length=70) details = models.TextField() class Answer(models.Model): question = models.ForeignKey('Question') details = models.TextField() id =  answers = Question.objects.get(id=id).answer_set.all()