﻿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
17459	Subquery fails across multiple databases	David Gouldin	nobody	"Given the following databases:

{{{
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'db1',
    },
    'db2': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'db2',
    },
}
}}}

database router:

{{{
class FooBarRouter(object):
    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'bar':
            return 'db2'
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label == 'bar':
            return 'db2'
        return None

    def allow_syncdb(self, db, model):
        if model._meta.app_label == 'bar':
            return db == 'db2'
        else:
            return db == 'default'
}}}

and models:

{{{
'''foo/models.py'''
class FooModel(models.Model):
    name = models.CharField(max_length=100)
}}}

{{{
'''bar/models.py'''
class BarModel(models.Model):
    name = models.CharField(max_length=100)
    foo_id = models.IntegerField()
}}}


The following will produce ""DatabaseError: no such table: foo_foomodel"":

{{{
from foo.models import FooModel
from bar.models import BarModel

foo1 = FooModel.objects.create(name='foo1')
bar1 = BarModel.objects.create(name='bar1', foo_id=foo1.id)

BarModel.objects.filter(foo_id__in=FooModel.objects.values_list('id', flat=True))
}}}


Instead of trying to merge the 2 querysets into a single sql statement, the inner queryset should be found to use a different database and be evaluated separately from the outer one.
"	Bug	closed	Database layer (models, ORM)	1.3	Normal	wontfix		dgouldin@… lrekucki@…	Design decision needed	0	0	0	0	0	0
