Opened 15 years ago
Closed 11 years ago
#12531 closed Bug (duplicate)
Model field name 'hiding' should not be permitted when field is defined in one of the parent models
Reported by: | Vasily Ivanov | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.1 |
Severity: | Normal | Keywords: | |
Cc: | bas@… | Triage Stage: | Accepted |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
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.
Change History (6)
comment:1 by , 15 years ago
Cc: | added |
---|
comment:2 by , 15 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:3 by , 14 years ago
Severity: | → Normal |
---|---|
Type: | → Bug |
Note:
See TracTickets
for help on using tickets.
I'm not completely convinced that the error isn't using an abstract model in the middle of an inheritance chain. However, either way, there is a bug than needs to be resolved.