#12531: Model field name 'hiding' should not be permitted when field is defined
in
one of the parent models
------------------------------------------+---------------------------------
Reporter: parxier | Owner: nobody
Status: new | Milestone:
Component: Database layer (models, ORM) | Version: 1.1
Keywords: | Stage: Unreviewed
Has_patch: 0 |
------------------------------------------+---------------------------------
According to [http://docs.djangoproject.com/en/1.1/topics/db/models
/#field-name-hiding-is-not-permitted] it is not permitted to hide field
name in child
model and django would raise a !FieldError exception. And that's
exactly what happens:
{{{
class Phone(models.Model):
pass
class Service(models.Model):
phone = models.ForeignKey(Phone, related_name='services')
class Call(Service):
phone = models.ForeignKey(Phone, related_name='calls')
}}}
{{{
> manage.py validate
django.core.exceptions.FieldError: Local field 'phone' in class 'Call'
clashes with field of similar name from base class 'Service'
}}}
works as expected... no problem
However, if I add new !IntermediateService model like this:
{{{
class Phone(models.Model):
pass
class Service(models.Model):
phone = models.ForeignKey(Phone, related_name='services')
class IntermediateService(Service):
class Meta:
abstract = True
class Call(IntermediateService):
phone = models.ForeignKey(Phone, related_name='calls')
}}}
...surprisingly it validates:
{{{
> manage.py validate
0 errors found
}}}
and generates sqls for postgresql:
{{{
> manage.py sql app
CREATE TABLE "app_phone" (
"id" serial NOT NULL PRIMARY KEY
);
CREATE TABLE "app_service" (
"id" serial NOT NULL PRIMARY KEY,
"phone_id" integer NOT NULL REFERENCES "app_phone" ("id")
DEFERRABLE INITIALLY DEFERRED
);
CREATE TABLE "app_call" (
"service_ptr_id" integer NOT NULL UNIQUE REFERENCES
"app_service" ("id") DEFERRABLE INITIALLY DEFERRED,
"phone_id" integer NOT NULL REFERENCES "app_phone" ("id")
DEFERRABLE INITIALLY DEFERRED
);
}}}
Looks like a bug to me.
--
Ticket URL: <http://code.djangoproject.com/ticket/12531>
Django <http://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.--
You received this message because you are subscribed to the Google Groups
"Django updates" 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-updates?hl=en.