Here is a better example:

def get_special_objects():
    # Some are special. But the result can still be huge!
    return MyModel.objects.filter(....)

obj=MyModel.objects.get(....)

# is this object "special?"
if obj in get_special_objects(): # This is very slow if there are many rows in 
the result.
    # yes, it is special

# This is my current solution
if get_special_objects().filter(pk=obj.pk).count():
    # yes, it is special


Up to now I sometimes used "if obj in queryset" but never realized, that
this evaluates the whole queryset. Up to now I thought this is lazy.

I have no big problem with this, since I found a solution.

Is there a reason why "if obj in queryset" is executed in python code, and not
in the DB?

  Thomas



Am 02.11.2011 12:42, schrieb Thomas Guettler:
> Hi,
> 
> I just discovered, that "if obj in queryset" can be very slow:
> 
> queryset=MyModel.objects.all()
> obj=MyModel.objects.get(id=319526)
> 
> #if obj in queryset: # This is very slow, if queryset is big: All lines from 
> queryset get created to Python objects
> #    print 'in'
> 
> if queryset.filter(id=obj.id): # Fast: Check is done inside DB.
>     print 'in'
> 
> What is the best way to do "if obj in queryset"?
> 
>   Thomas
> 

-- 
Thomas Guettler, http://www.thomas-guettler.de/
E-Mail: guettli (*) thomas-guettler + de

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@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