Hi,
I was working with django 1.3.1 and oracle and i got this error:
ORA-00918: column ambiguously defined.
After some digging in django/db/models/sql/compiler.py i discovered
the bug/error:
My models had a definition according to django sujested naming:
class SampleModel(models.Model):
my_custom_id = models.AutoField('ID', db_column='MY_CUSTOM_ID'
primary_key=True)
field2 = models...
class RelatedSampleModel(models.Model):
id = models.AutoField('ID', primary_key=True)
sample_model = models.ForeignKey(SampleModel)
As it happens, when we make a query that involves select_related, the
generated query WILL NOT create a column alias for the my_custom_id
column and we will have something like:
SELECT * FROM (
SELECT ROWNUM AS "_RN", "_SUB".* FROM (
SELECT
"SAMPLE_MODEL"."MY_CUSTOM_ID",
"SAMPLE_MODEL"."FIELD2...",
"RELATED_SAMPLE_MODEL"."ID",
"RELATED_SAMPLE_MODEL"."MY_CUSTOM_ID"
FROM "REL"
INNER JOIN ".....)) "_SUB" WHERE ROWNUM <= 21) WHERE
"_RN" > 0'
The problem was the definition of the db_column in uppercase and the
foreignkey as a regular model field, witch resulted in a lowercase
column name in the sql generator.
I solved this error by changing all the names to lowercase. After
that, django correctly defined the column alias:
"RELATED_SAMPLE_MODEL"."MY_CUSTOM_ID" as Col20
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en.