Author: brosner
Date: 2008-08-29 12:41:40 -0500 (Fri, 29 Aug 2008)
New Revision: 8708

Modified:
   django/trunk/django/forms/models.py
   django/trunk/tests/modeltests/model_formsets/models.py
Log:
Fixed #7918 -- Allow the foreign key in an inline to be any where in the parent 
chain. Thanks sil for the report.

Modified: django/trunk/django/forms/models.py
===================================================================
--- django/trunk/django/forms/models.py 2008-08-29 17:32:21 UTC (rev 8707)
+++ django/trunk/django/forms/models.py 2008-08-29 17:41:40 UTC (rev 8708)
@@ -385,7 +385,7 @@
             fk = fks_to_parent[0]
             if not isinstance(fk, ForeignKey) or \
                     (fk.rel.to != parent_model and
-                     fk.rel.to not in parent_model._meta.parents.keys()):
+                     fk.rel.to not in parent_model._meta.get_parent_list()):
                 raise Exception("fk_name '%s' is not a ForeignKey to %s" % 
(fk_name, parent_model))
         elif len(fks_to_parent) == 0:
             raise Exception("%s has no field named '%s'" % (model, fk_name))
@@ -395,7 +395,7 @@
             f for f in opts.fields
             if isinstance(f, ForeignKey)
             and (f.rel.to == parent_model
-                or f.rel.to in parent_model._meta.parents.keys())
+                or f.rel.to in parent_model._meta.get_parent_list())
         ]
         if len(fks_to_parent) == 1:
             fk = fks_to_parent[0]

Modified: django/trunk/tests/modeltests/model_formsets/models.py
===================================================================
--- django/trunk/tests/modeltests/model_formsets/models.py      2008-08-29 
17:32:21 UTC (rev 8707)
+++ django/trunk/tests/modeltests/model_formsets/models.py      2008-08-29 
17:41:40 UTC (rev 8708)
@@ -37,6 +37,29 @@
     some_field = models.CharField(max_length=100)
 
 
+# models for inheritance tests.
+
+class Place(models.Model):
+    name = models.CharField(max_length=50)
+    city = models.CharField(max_length=50)
+    
+    def __unicode__(self):
+        return self.name
+
+class Owner(models.Model):
+    name = models.CharField(max_length=100)
+    place = models.ForeignKey(Place)
+
+class Restaurant(Place):
+    serves_pizza = models.BooleanField()
+    
+    def __unicode__(self):
+        return self.name
+
+class MexicanRestaurant(Restaurant):
+    serves_tacos = models.BooleanField()
+
+
 __test__ = {'API_TESTS': """
 
 >>> from datetime import date
@@ -396,4 +419,13 @@
 <p><label for="id_form-0-my_pk">My pk:</label> <input id="id_form-0-my_pk" 
type="text" name="form-0-my_pk" maxlength="10" /></p>
 <p><label for="id_form-0-some_field">Some field:</label> <input 
id="id_form-0-some_field" type="text" name="form-0-some_field" maxlength="100" 
/></p>
 
+# Foreign keys in parents ########################################
+
+>>> from django.forms.models import _get_foreign_key
+
+>>> type(_get_foreign_key(Restaurant, Owner))
+<class 'django.db.models.fields.related.ForeignKey'>
+>>> type(_get_foreign_key(MexicanRestaurant, Owner))
+<class 'django.db.models.fields.related.ForeignKey'>
+
 """}


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