Author: brosner
Date: 2008-08-22 14:27:26 -0500 (Fri, 22 Aug 2008)
New Revision: 8469

Modified:
   django/trunk/django/contrib/admin/options.py
   django/trunk/django/db/models/fields/related.py
   django/trunk/tests/modeltests/model_forms/models.py
Log:
Fixed #7947 -- Handle the display of OneToOneField in model forms correctly. 
Thanks tyson for the report and original patch.

Modified: django/trunk/django/contrib/admin/options.py
===================================================================
--- django/trunk/django/contrib/admin/options.py        2008-08-22 19:20:07 UTC 
(rev 8468)
+++ django/trunk/django/contrib/admin/options.py        2008-08-22 19:27:26 UTC 
(rev 8469)
@@ -128,7 +128,10 @@
             formfield = db_field.formfield(**kwargs)
             # Don't wrap raw_id fields. Their add function is in the popup 
window.
             if not db_field.name in self.raw_id_fields:
-                formfield.widget = 
widgets.RelatedFieldWidgetWrapper(formfield.widget, db_field.rel, 
self.admin_site)
+                # formfield can be None if it came from a OneToOneField with
+                # parent_link=True
+                if formfield is not None:
+                    formfield.widget = 
widgets.RelatedFieldWidgetWrapper(formfield.widget, db_field.rel, 
self.admin_site)
             return formfield
 
         # For any other type of field, just call its formfield() method.

Modified: django/trunk/django/db/models/fields/related.py
===================================================================
--- django/trunk/django/db/models/fields/related.py     2008-08-22 19:20:07 UTC 
(rev 8468)
+++ django/trunk/django/db/models/fields/related.py     2008-08-22 19:27:26 UTC 
(rev 8469)
@@ -744,7 +744,6 @@
     """
     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)
@@ -754,6 +753,11 @@
                 SingleRelatedObjectDescriptor(related))
         if not cls._meta.one_to_one_field:
             cls._meta.one_to_one_field = self
+    
+    def formfield(self, **kwargs):
+        if self.rel.parent_link:
+            return None
+        return super(OneToOneField, self).formfield(**kwargs)
 
 class ManyToManyField(RelatedField, Field):
     def __init__(self, to, **kwargs):

Modified: django/trunk/tests/modeltests/model_forms/models.py
===================================================================
--- django/trunk/tests/modeltests/model_forms/models.py 2008-08-22 19:20:07 UTC 
(rev 8468)
+++ django/trunk/tests/modeltests/model_forms/models.py 2008-08-22 19:27:26 UTC 
(rev 8469)
@@ -54,6 +54,12 @@
     def __unicode__(self):
         return self.headline
 
+class ImprovedArticle(models.Model):
+    article = models.OneToOneField(Article)
+
+class ImprovedArticleWithParentLink(models.Model):
+    article = models.OneToOneField(Article, parent_link=True)
+
 class PhoneNumber(models.Model):
     phone = models.PhoneNumberField()
     description = models.CharField(max_length=20)
@@ -773,6 +779,20 @@
 >>> list(f.choices)
 [(1L, 'multicategory Entertainment'), (2L, "multicategory It's a test"), (3L, 
'multicategory Third'), (4L, 'multicategory Fourth')]
 
+# OneToOneField ###############################################################
+
+>>> class ImprovedArticleForm(ModelForm):
+...     class Meta:
+...         model = ImprovedArticle
+>>> ImprovedArticleForm.base_fields.keys()
+['article']
+
+>>> class ImprovedArticleWithParentLinkForm(ModelForm):
+...     class Meta:
+...         model = ImprovedArticleWithParentLink
+>>> ImprovedArticleWithParentLinkForm.base_fields.keys()
+[]
+
 # PhoneNumberField ############################################################
 
 >>> class PhoneNumberForm(ModelForm):


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