Hi,

Try this:

chapters = Chapter.objects.filter(course=course).prefetch_related(
        Prefetch('status_chapter', 
queryset=LessonStatus.objects.filter(student=request.user).select_related('lesson')),
)

Otherwise, maybe the to_attr will help.

Collin



On Saturday, November 29, 2014 8:21:03 AM UTC-5, Tobias Abdon wrote:
>
> I am trying to use prefetch_related’s new Prefetch option to further 
> filter a database query. Using debug toolbar I can see that 
> prefetch_related is doing its job in making only three DB queries. However, 
> I am positive that the queryset filter I’m passing in is not working. Even 
> though I’m using the option, all of the records are being retrieved in the 
> query.
>
> The goal of the below code is to show a list of Chapters. For each 
> chapter, show its lessons. For each lesson, show the logged in user’s 
> status (complete/incomplete).
>
> Models
> class Chapter(models.Model):
>     status = models.IntegerField(choices=STATUS_CHOICES, default=1)
>     name = models.CharField(max_length=100)
>     slug = AutoSlugField(populate_from='name')
>     desc = models.TextField()
>
> class Lesson(models.Model):
>     name = models.CharField(max_length=100)
>     chapter = models.ForeignKey(Chapter, related_name=‘les_chapter’)
>
> class LessonStatus(models.Model):
>     status = models.IntegerField(choices=STATUS_CHOICES, default=1)
>     lesson = models.ForeignKey(Lesson, related_name="status_lesson")
>     student = models.ForeignKey(User)
>     chapter = models.ForeignKey(Chapter, related_name=“status_chapter")
>
>
> View
> def chapter_list(request, course_slug):
>
>     course = Course.objects.get(slug=course_slug)
>
>     chapters = Chapter.objects.filter(course=course).prefetch_related(
>         Prefetch('status_chapter__lesson__chapter', 
> queryset=LessonStatus.objects.filter(student=request.user)),
>     )
>
>     return TemplateResponse(request,
>         'course/chapter_list_parent.html',
>         {'chapters': chapters, 'course': course,}
>     )
>
>
> Template
> <div id="chapters">
>     {% for ch in chapters %}
>         <p>{{ ch.name }}</p>
>         {% for le in ch.status_chapter.all %}
>             <p>lesson status: {{ le.status }}</p>
>             <p>lesson name: {{ le.lesson.name }}</p>
>         {% endfor %}
>     {% endfor %}
> </div>
>
> When I run this code the LessonStatus is not being filtered by 
> student=request.user. Instead, it is simply getting all LessonStatus 
> records, including those that are for other users. 
>
> Can anyone see if there's something wrong with the above code? Or any 
> ideas how to troubleshoot? There are no errors generated.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/b77fa7c2-c2ef-4570-a0ce-717836832fa1%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to