Skip to content

Commit

Permalink
Fixed #6755: model inheritance now works in the admin. Thanks, sloonz…
Browse files Browse the repository at this point in the history
… and Michael Placentra.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8033 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
jacobian committed Jul 22, 2008
1 parent c236874 commit 863f4eb
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 0 deletions.
2 changes: 2 additions & 0 deletions AUTHORS
Expand Up @@ -303,6 +303,7 @@ answer newbie questions, and generally made Django that much better:
phil@produxion.net phil@produxion.net
phil.h.smith@gmail.com phil.h.smith@gmail.com
Gustavo Picon Gustavo Picon
Michael Placentra II <someone@michaelplacentra2.net>
Luke Plant <http://lukeplant.me.uk/> Luke Plant <http://lukeplant.me.uk/>
plisk plisk
Mihai Preda <mihai_preda@yahoo.com> Mihai Preda <mihai_preda@yahoo.com>
Expand Down Expand Up @@ -342,6 +343,7 @@ answer newbie questions, and generally made Django that much better:
jason.sidabras@gmail.com jason.sidabras@gmail.com
Jozko Skrablin <jozko.skrablin@gmail.com> Jozko Skrablin <jozko.skrablin@gmail.com>
Ben Slavin <benjamin.slavin@gmail.com> Ben Slavin <benjamin.slavin@gmail.com>
sloonz <simon.lipp@insa-lyon.fr>
SmileyChris <smileychris@gmail.com> SmileyChris <smileychris@gmail.com>
smurf@smurf.noris.de smurf@smurf.noris.de
Vsevolod Solovyov Vsevolod Solovyov
Expand Down
6 changes: 6 additions & 0 deletions django/db/models/base.py
Expand Up @@ -299,6 +299,12 @@ def save_base(self, raw=False, cls=None):
# attributes we have been given to the class we have been given. # attributes we have been given to the class we have been given.
if not raw: if not raw:
for parent, field in meta.parents.items(): for parent, field in meta.parents.items():
# At this point, parent's primary key field may be unknown
# (for example, from administration form which doesn't fill
# this field). If so, fill it.
if getattr(self, parent._meta.pk.attname) is None and getattr(self, field.attname) is not None:
setattr(self, parent._meta.pk.attname, getattr(self, field.attname))

self.save_base(raw, parent) self.save_base(raw, parent)
setattr(self, field.attname, self._get_pk_val(parent._meta)) setattr(self, field.attname, self._get_pk_val(parent._meta))


Expand Down
1 change: 1 addition & 0 deletions django/db/models/fields/related.py
Expand Up @@ -706,6 +706,7 @@ class OneToOneField(ForeignKey):
""" """
def __init__(self, to, to_field=None, **kwargs): def __init__(self, to, to_field=None, **kwargs):
kwargs['unique'] = True kwargs['unique'] = True
kwargs['editable'] = False
if 'num_in_admin' not in kwargs: if 'num_in_admin' not in kwargs:
kwargs['num_in_admin'] = 0 kwargs['num_in_admin'] = 0
super(OneToOneField, self).__init__(to, to_field, OneToOneRel, **kwargs) super(OneToOneField, self).__init__(to, to_field, OneToOneRel, **kwargs)
Expand Down
15 changes: 15 additions & 0 deletions tests/regressiontests/model_inheritance_regress/models.py
Expand Up @@ -159,4 +159,19 @@ class Child(Parent):
... ...
DoesNotExist: ItalianRestaurant matching query does not exist. DoesNotExist: ItalianRestaurant matching query does not exist.
# Regression test for #6755
>>> r = Restaurant(serves_pizza=False)
>>> r.save()
>>> r.id
3
>>> r.place_ptr_id
3
>>> r = Restaurant(place_ptr_id=3, serves_pizza=True)
>>> r.save()
>>> r.id
3
>>> r.place_ptr_id
3
"""} """}

0 comments on commit 863f4eb

Please sign in to comment.