Wednesday, April 10, 2013

Django queryset 'in' operator on two querysets fails on first call

Cross posted from: stack overflow.

When using the 'in' operator on two querysets, the first time the call is made it fails.

from django.db import models    class Category(models.Model):      name = models.CharField(max_length=100)      slug = models.SlugField(max_length=100, db_index=True, unique=True)      def __unicode__(self):          return self.name    class Director(models.Model):      name = models.CharField(max_length=100)      slug = models.SlugField(max_length=100, db_index=True, unique=True)      def __unicode__(self):          return self.name    class Project(models.Model):      title = models.CharField(max_length=100)      slug = models.SlugField(max_length=100, db_index=True, unique=True)      director = models.ForeignKey(Director, related_name='projects_via_director')      categories = models.ManyToManyField(Category,                                           related_name='projects_via_category')          def __unicode__(self):          return self.title      category_list = Category.objects.prefetch_related('projects_via_category')  director_list = Director.objects.prefetch_related('projects_via_director')  other_cats = category_list.filter(      projects_via_category__director__slug='steven-spielberg')    print category_list # [<Category: Film>, <Category: Commercial>]  print other_cats # [<Category: Film>]  print category_list[0] in other_cats # False  print category_list[0] in other_cats # True

If I remove 'prefetch_related' and use 'all' instead then the problem is gone, however this uses many more DB calls.

How can I get the correct result first time using prefetch_related?

--
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 django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate