On Nov 8, 3:40 pm, Andy <selforgani...@gmail.com> wrote:
> I have a Q&A type of site with the following models:
>
> class Question(models.Model):
>     title = models.CharField(max_length=70)
>     details = models.TextField()
>
> class Answer(models.Model):
>     question_id = IntegerField()
>     details = models.TextField()
>
> I need to display a specific question together with its answers.
> Normally I'd need 2 queries to do that:
>
> Question.objects.get(id=1)
> Answer.objects.get(question_id=1)[:10]
>
> I'm hoping to retrieve everything using one query. In MySQL it'd be:
>
> SELECT *
> FROM Question JOIN Answer ON Question.id=Answer.question_id
> WHERE Question.id=1
> LIMIT 10
>
> Is there anyway I could do this through Django's ORM?
> Would extra() help in this case?

This is exactly what `select_related()` does. The only gotcha is that
you have to start with the Answer model, rather than Question, but the
result is the same:

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

Now each answer object has a pre-fetched 'question' attribute, and
accessing it won't hit the db again.
--
DR.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to