Commits

Anonymous committed 8d75052

Fixed #6755: model inheritance now works in the admin. Thanks, sloonz and Michael Placentra.

Comments (0)

Files changed (4)

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

django/db/models/base.py

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

django/db/models/fields/related.py

     """
     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)

tests/regressiontests/model_inheritance_regress/models.py

 ...
 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
+
+
 """}