﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
7095	Error with Many2Many filter() in models managers after queryset-refactor merge	fcaprioli@…	nobody	"Hi,
first of all, thank you all for your excellent work; after the qs-rf branch merge, there is a small regression that cause a python error in where.py during an update() if a custom Manager tries to .filter() thru a ManyToManyField in get_query_set(). 
This breaks, for example, CurrentSiteManager with a M2M 'site' field.

So, if you have a model like:
{{{
from django.db import models
from django.contrib.sites.models import Site
from django.contrib.sites.managers import CurrentSiteManager

class Dummy(models.Model):
    dumb = models.TextField()
    site = models.ManyToManyField(Site)
    
    objects = CurrentSiteManager()

def dummy_view(request):
    t = Dummy.objects.create(dumb='abc')
    t.site.add(settings.SITE_ID)
    t.save()
}}}

t.save() would give a  TypeError: object of type 'Query' has no len(). 
At some point, a Query object get passed to make_atom rather than a list.
This is the traceback:

{{{
Traceback:
File ""D:\Arturo\django\core\handlers\base.py"" in get_response
  82.                 response = callback(request, *callback_args, **callback_kwargs)
File ""D:\Arturo\arturo5\magazine\views_manager_article.py"" in article_add
  45.     t.save()
File ""D:\Arturo\django\db\models\base.py"" in save
  298.         self.save_base()
File ""D:\Arturo\django\db\models\base.py"" in save_base
  338.                     manager.filter(pk=pk_val)._update(values)
File ""D:\Arturo\django\db\models\query.py"" in _update
  299.         query.execute_sql(None)
File ""D:\Arturo\django\db\models\sql\subqueries.py"" in execute_sql
  112.         super(UpdateQuery, self).execute_sql(result_type)
File ""D:\Arturo\django\db\models\sql\query.py"" in execute_sql
  1432.             sql, params = self.as_sql()
File ""D:\Arturo\django\db\models\sql\subqueries.py"" in as_sql
  136.         where, params = self.where.as_sql()
File ""D:\Arturo\django\db\models\sql\where.py"" in as_sql
  61.                     sql, params = self.make_atom(child, qn)
File ""D:\Arturo\django\db\models\sql\where.py"" in make_atom
  130.             return ('%s IN (%s)' % (field_sql, ', '.join(['%s'] * len(value))),

Exception Type: TypeError at /arturo/magazine/add/
Exception Value: object of type 'Query' has no len()
}}}
"		closed	Database layer (models, ORM)	dev		fixed			Accepted	0	0	0	0	0	0
