#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.


Reply via email to