summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2008-07-22 01:10:06 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2008-07-22 01:10:06 +0000
commit863f4eb1d7cf96013207986c7f848defde16210d (patch)
treef81f223b1ff9d159492864dc36aafd7356129001
parentc236874c48fff6509027ee08135eaf3171023917 (diff)
Fixed #6755: model inheritance now works in the admin. Thanks, sloonz and Michael Placentra.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8033 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--AUTHORS2
-rw-r--r--django/db/models/base.py6
-rw-r--r--django/db/models/fields/related.py1
-rw-r--r--tests/regressiontests/model_inheritance_regress/models.py15
4 files changed, 24 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
index d085663500..e22ee45cbf 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -303,6 +303,7 @@ answer newbie questions, and generally made Django that much better:
phil@produxion.net
phil.h.smith@gmail.com
Gustavo Picon
+ Michael Placentra II <someone@michaelplacentra2.net>
Luke Plant <http://lukeplant.me.uk/>
plisk
Mihai Preda <mihai_preda@yahoo.com>
@@ -342,6 +343,7 @@ answer newbie questions, and generally made Django that much better:
jason.sidabras@gmail.com
Jozko Skrablin <jozko.skrablin@gmail.com>
Ben Slavin <benjamin.slavin@gmail.com>
+ sloonz <simon.lipp@insa-lyon.fr>
SmileyChris <smileychris@gmail.com>
smurf@smurf.noris.de
Vsevolod Solovyov
diff --git a/django/db/models/base.py b/django/db/models/base.py
index 51cefcf77b..36dd5ee5e6 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -299,6 +299,12 @@ class Model(object):
# attributes we have been given to the class we have been given.
if not raw:
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)
setattr(self, field.attname, self._get_pk_val(parent._meta))
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index c76c87ec74..febe9884ed 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -706,6 +706,7 @@ class OneToOneField(ForeignKey):
"""
def __init__(self, to, to_field=None, **kwargs):
kwargs['unique'] = True
+ kwargs['editable'] = False
if 'num_in_admin' not in kwargs:
kwargs['num_in_admin'] = 0
super(OneToOneField, self).__init__(to, to_field, OneToOneRel, **kwargs)
diff --git a/tests/regressiontests/model_inheritance_regress/models.py b/tests/regressiontests/model_inheritance_regress/models.py
index b78b493e15..3f4fa04b77 100644
--- a/tests/regressiontests/model_inheritance_regress/models.py
+++ b/tests/regressiontests/model_inheritance_regress/models.py
@@ -159,4 +159,19 @@ Traceback (most recent call last):
...
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
+
+
"""}