Author: russellm
Date: 2009-05-03 08:47:36 -0500 (Sun, 03 May 2009)
New Revision: 10671

Added:
   django/branches/releases/1.0.X/tests/regressiontests/admin_inlines/
   
django/branches/releases/1.0.X/tests/regressiontests/admin_inlines/__init__.py
   django/branches/releases/1.0.X/tests/regressiontests/admin_inlines/models.py
Modified:
   django/branches/releases/1.0.X/django/contrib/admin/helpers.py
   
django/branches/releases/1.0.X/django/contrib/admin/templates/admin/edit_inline/stacked.html
   
django/branches/releases/1.0.X/django/contrib/admin/templates/admin/edit_inline/tabular.html
Log:
[1.0.X] Fixed #9362 -- Prevented inline forms from overwriting the 
content_type_id attribute on objets being inlined. Thanks to carljm for the 
report and patch.

Merge of r10667 from trunk.

Modified: django/branches/releases/1.0.X/django/contrib/admin/helpers.py
===================================================================
--- django/branches/releases/1.0.X/django/contrib/admin/helpers.py      
2009-05-03 13:46:30 UTC (rev 10670)
+++ django/branches/releases/1.0.X/django/contrib/admin/helpers.py      
2009-05-03 13:47:36 UTC (rev 10671)
@@ -129,7 +129,7 @@
         self.formset = formset
         self.original = original
         if original is not None:
-            self.original.content_type_id = 
ContentType.objects.get_for_model(original).pk
+            self.original_content_type_id = 
ContentType.objects.get_for_model(original).pk
         self.show_url = original and hasattr(original, 'get_absolute_url')
         super(InlineAdminForm, self).__init__(form, fieldsets, 
prepopulated_fields)
 

Modified: 
django/branches/releases/1.0.X/django/contrib/admin/templates/admin/edit_inline/stacked.html
===================================================================
--- 
django/branches/releases/1.0.X/django/contrib/admin/templates/admin/edit_inline/stacked.html
        2009-05-03 13:46:30 UTC (rev 10670)
+++ 
django/branches/releases/1.0.X/django/contrib/admin/templates/admin/edit_inline/stacked.html
        2009-05-03 13:47:36 UTC (rev 10671)
@@ -10,7 +10,7 @@
     {% if inline_admin_formset.formset.can_delete and 
inline_admin_form.original %}<span class="delete">{{ 
inline_admin_form.deletion_field.field }} {{ 
inline_admin_form.deletion_field.label_tag }}</span>{% endif %}
   </h3>
   {% if inline_admin_form.show_url %}
-  <p><a href="../../../r/{{ inline_admin_form.original.content_type_id }}/{{ 
inline_admin_form.original.id }}/">{% trans "View on site" %}</a></p>
+  <p><a href="../../../r/{{ inline_admin_form.original_content_type_id }}/{{ 
inline_admin_form.original.id }}/">{% trans "View on site" %}</a></p>
   {% endif %}
   {% if inline_admin_form.form.non_field_errors %}{{ 
inline_admin_form.form.non_field_errors }}{% endif %}
 

Modified: 
django/branches/releases/1.0.X/django/contrib/admin/templates/admin/edit_inline/tabular.html
===================================================================
--- 
django/branches/releases/1.0.X/django/contrib/admin/templates/admin/edit_inline/tabular.html
        2009-05-03 13:46:30 UTC (rev 10670)
+++ 
django/branches/releases/1.0.X/django/contrib/admin/templates/admin/edit_inline/tabular.html
        2009-05-03 13:47:36 UTC (rev 10671)
@@ -24,7 +24,7 @@
         <td class="original">
           {% if inline_admin_form.original or inline_admin_form.show_url %}<p>
           {% if inline_admin_form.original %} {{ inline_admin_form.original 
}}{% endif %}
-          {% if inline_admin_form.show_url %}<a href="../../../r/{{ 
inline_admin_form.original.content_type_id }}/{{ inline_admin_form.original.id 
}}/">{% trans "View on site" %}</a>{% endif %}
+          {% if inline_admin_form.show_url %}<a href="../../../r/{{ 
inline_admin_form.original_content_type_id }}/{{ inline_admin_form.original.id 
}}/">{% trans "View on site" %}</a>{% endif %}
             </p>{% endif %}
           {% if inline_admin_form.has_auto_field %}{{ 
inline_admin_form.pk_field.field }}{% endif %}
           {{ inline_admin_form.fk_field.field }}

Added: 
django/branches/releases/1.0.X/tests/regressiontests/admin_inlines/__init__.py
===================================================================

Added: 
django/branches/releases/1.0.X/tests/regressiontests/admin_inlines/models.py
===================================================================
--- 
django/branches/releases/1.0.X/tests/regressiontests/admin_inlines/models.py    
                            (rev 0)
+++ 
django/branches/releases/1.0.X/tests/regressiontests/admin_inlines/models.py    
    2009-05-03 13:47:36 UTC (rev 10671)
@@ -0,0 +1,51 @@
+"""
+Testing of admin inline formsets.
+
+"""
+from django.db import models
+from django.contrib.contenttypes.models import ContentType
+from django.contrib.contenttypes import generic
+
+class Parent(models.Model):
+    name = models.CharField(max_length=50)
+
+    def __unicode__(self):
+        return self.name
+
+class Teacher(models.Model):
+    name = models.CharField(max_length=50)
+
+    def __unicode__(self):
+        return self.name
+
+class Child(models.Model):
+    name = models.CharField(max_length=50)
+    teacher = models.ForeignKey(Teacher)
+
+    content_type = models.ForeignKey(ContentType)
+    object_id = models.PositiveIntegerField()
+    parent = generic.GenericForeignKey()
+
+    def __unicode__(self):
+        return u'I am %s, a child of %s' % (self.name, self.parent)
+
+__test__ = {'API_TESTS': """
+
+# Regression test for #9362
+
+>>> sally = Teacher.objects.create(name='Sally')
+>>> john = Parent.objects.create(name='John')
+>>> joe = Child.objects.create(name='Joe', teacher=sally, parent=john)
+
+The problem depends only on InlineAdminForm and its "original" argument, so
+we can safely set the other arguments to None/{}. We just need to check that
+the content_type argument of Child isn't altered by the internals of the
+inline form.
+
+>>> from django.contrib.admin.helpers import InlineAdminForm
+>>> iaf = InlineAdminForm(None, None, {}, {}, joe)
+>>> iaf.original
+<Child: I am Joe, a child of John>
+
+"""
+}
\ No newline at end of file


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