﻿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
21554	incorrect SQL generated when using multiple inheritance	Matt	nobody	"Our application makes use of multiple-inheritance and we've just come across an interesting bug.  There is a test case attached and it fails against the latest 1.4, 1.5, 1.6, and master versions.  Though the reason changes between versions 1.5 and 1.6.

The models:
{{{
class Person(models.Model):
    name = models.CharField(max_length=50)
    
class Politician(models.Model):
    politician_id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=50)
    
class Congressman(Person, Politician):
    state = models.CharField(max_length=2)
    
class Senator(Congressman):
    pass
}}}

The statement {{{ Senator.objects.get(politician_id=1) }}} produces incorrect SQL for all versions, but is different between versions.

1.4.10 and 1.5.5 result in the error ""DoesNotExist: Senator matching query does not exist."" due to it trying to join demo_politician onto demo_senator via demo_senator.congressman_ptr_id instead of demo_politician.politician_id

{{{
SELECT ""demo_person"".""id"", ""demo_person"".""name"", T5.""politician_id"", T5.""title"", ""demo_congressman"".""politician_ptr_id"", ""demo_congressman"".""person_ptr_id"", ""demo_congressman"".""state"", ""demo_senator"".""congressman_ptr_id""
FROM ""demo_senator""
INNER JOIN ""demo_congressman"" ON (""demo_senator"".""congressman_ptr_id"" = ""demo_congressman"".""person_ptr_id"")
INNER JOIN ""demo_person"" ON (""demo_senator"".""congressman_ptr_id"" = ""demo_person"".""id"")
INNER JOIN ""demo_politician"" T5 ON (""demo_senator"".""congressman_ptr_id"" = T5.""politician_id"")
WHERE ""demo_congressman"".""politician_ptr_id"" = 1 
}}}


1.6 and master results in the error ""OperationalError: no such column: demo_congressman.politician_id"".  It incorrectly thinks that politician_id is on demo_congressman instead of demo_politician.

{{{
SELECT ""demo_person"".""id"", ""demo_person"".""name"", ""demo_congressman"".""politician_id"", ""demo_congressman"".""title"", ""demo_congressman"".""politician_ptr_id"", ""demo_congressman"".""person_ptr_id"", ""demo_congressman"".""state"", ""demo_senator"".""congressman_ptr_id""
FROM ""demo_senator""
INNER JOIN ""demo_congressman"" ON ( ""demo_senator"".""congressman_ptr_id"" = ""demo_congressman"".""person_ptr_id"" )
INNER JOIN ""demo_person"" ON ( ""demo_congressman"".""person_ptr_id"" = ""demo_person"".""id"" )
WHERE ""demo_congressman"".""politician_ptr_id"" = 1 
}}}

"	Bug	closed	Database layer (models, ORM)	dev	Normal	fixed	multiple-inheritance		Accepted	1	0	0	1	0	0
