Index: django/db/models/query.py =================================================================== --- django/db/models/query.py (revision 3335) +++ django/db/models/query.py (working copy) @@ -902,8 +902,14 @@ # Last query term was a normal field. column = field.column + ## see ticket #2144 where.append(get_where_clause(lookup_type, current_table + '.', column, value)) - params.extend(field.get_db_prep_lookup(lookup_type, value)) + def _hack_pvalue(value): + from django.db.models import Model as hack_Model + if isinstance(value, hack_Model): + return value.id + return value + params.extend([_hack_pvalue(param) for param in field.get_db_prep_lookup(lookup_type, value)]) return joins, where, params