Author: russellm
Date: 2009-12-17 01:28:26 -0600 (Thu, 17 Dec 2009)
New Revision: 11886

Modified:
   django/branches/releases/1.1.X/django/contrib/contenttypes/generic.py
   
django/branches/releases/1.1.X/tests/regressiontests/generic_inline_admin/models.py
   
django/branches/releases/1.1.X/tests/regressiontests/generic_inline_admin/tests.py
Log:
[1.1.X] Updated BaseGenericInlineFormSet to match the changes made to 
BaseInlineFormSet in r11874.

Backport of r11885 from trunk.

Modified: django/branches/releases/1.1.X/django/contrib/contenttypes/generic.py
===================================================================
--- django/branches/releases/1.1.X/django/contrib/contenttypes/generic.py       
2009-12-17 07:27:26 UTC (rev 11885)
+++ django/branches/releases/1.1.X/django/contrib/contenttypes/generic.py       
2009-12-17 07:28:26 UTC (rev 11886)
@@ -294,15 +294,27 @@
     ct_field_name = "content_type"
     ct_fk_field_name = "object_id"
 
-    def __init__(self, data=None, files=None, instance=None, save_as_new=None, 
prefix=None):
+    def __init__(self, data=None, files=None, instance=None, save_as_new=None,
+                 prefix=None, queryset=None):
+        # Avoid a circular import.
+        from django.contrib.contenttypes.models import ContentType
         opts = self.model._meta
         self.instance = instance
         self.rel_name = '-'.join((
             opts.app_label, opts.object_name.lower(),
             self.ct_field.name, self.ct_fk_field.name,
         ))
+        if self.instance is None or self.instance.pk is None:
+            qs = self.model._default_manager.none()
+        else:
+            if queryset is None:
+                queryset = self.model._default_manager
+            qs = queryset.filter(**{
+                self.ct_field.name: 
ContentType.objects.get_for_model(self.instance),
+                self.ct_fk_field.name: self.instance.pk,
+            })
         super(BaseGenericInlineFormSet, self).__init__(
-            queryset=self.get_queryset(), data=data, files=files,
+            queryset=qs, data=data, files=files,
             prefix=prefix
         )
 
@@ -314,19 +326,6 @@
         ))
     get_default_prefix = classmethod(get_default_prefix)
 
-    def get_queryset(self):
-        # Avoid a circular import.
-        from django.contrib.contenttypes.models import ContentType
-        if self.instance is None or self.instance.pk is None:
-            return self.model._default_manager.none()
-        qs = self.model._default_manager.filter(**{
-            self.ct_field.name: 
ContentType.objects.get_for_model(self.instance),
-            self.ct_fk_field.name: self.instance.pk,
-        })
-        if not qs.ordered:
-            qs = qs.order_by(self.model._meta.pk.name)
-        return qs
-
     def save_new(self, form, commit=True):
         # Avoid a circular import.
         from django.contrib.contenttypes.models import ContentType

Modified: 
django/branches/releases/1.1.X/tests/regressiontests/generic_inline_admin/models.py
===================================================================
--- 
django/branches/releases/1.1.X/tests/regressiontests/generic_inline_admin/models.py
 2009-12-17 07:27:26 UTC (rev 11885)
+++ 
django/branches/releases/1.1.X/tests/regressiontests/generic_inline_admin/models.py
 2009-12-17 07:28:26 UTC (rev 11886)
@@ -20,7 +20,7 @@
 
 class MediaInline(generic.GenericTabularInline):
     model = Media
-    
+
 class EpisodeAdmin(admin.ModelAdmin):
     inlines = [
         MediaInline,
@@ -56,7 +56,7 @@
     model = Media
     extra = 5
     max_num = 2
-    
+
 admin.site.register(EpisodeMaxNum, inlines=[MediaMaxNumInline])
 
 #

Modified: 
django/branches/releases/1.1.X/tests/regressiontests/generic_inline_admin/tests.py
===================================================================
--- 
django/branches/releases/1.1.X/tests/regressiontests/generic_inline_admin/tests.py
  2009-12-17 07:27:26 UTC (rev 11885)
+++ 
django/branches/releases/1.1.X/tests/regressiontests/generic_inline_admin/tests.py
  2009-12-17 07:28:26 UTC (rev 11886)
@@ -17,7 +17,7 @@
         self.original_template_debug = settings.TEMPLATE_DEBUG
         settings.TEMPLATE_DEBUG = True
         self.client.login(username='super', password='secret')
-        
+
         # Can't load content via a fixture (since the GenericForeignKey
         # relies on content type IDs, which will vary depending on what
         # other tests have been run), thus we do it here.
@@ -25,26 +25,30 @@
         self.episode_pk = e.pk
         m = Media(content_object=e, url='http://example.com/podcast.mp3')
         m.save()
-        self.media_pk = m.pk
-    
+        self.mp3_media_pk = m.pk
+
+        m = Media(content_object=e, url='http://example.com/logo.png')
+        m.save()
+        self.png_media_pk = m.pk
+
     def tearDown(self):
         self.client.logout()
         settings.TEMPLATE_DEBUG = self.original_template_debug
-    
+
     def testBasicAddGet(self):
         """
         A smoke test to ensure GET on the add_view works.
         """
         response = 
self.client.get('/generic_inline_admin/admin/generic_inline_admin/episode/add/')
         self.failUnlessEqual(response.status_code, 200)
-    
+
     def testBasicEditGet(self):
         """
         A smoke test to ensure GET on the change_view works.
         """
         response = 
self.client.get('/generic_inline_admin/admin/generic_inline_admin/episode/%d/' 
% self.episode_pk)
         self.failUnlessEqual(response.status_code, 200)
-    
+
     def testBasicAddPost(self):
         """
         A smoke test to ensure POST on add_view works.
@@ -57,7 +61,7 @@
         }
         response = 
self.client.post('/generic_inline_admin/admin/generic_inline_admin/episode/add/',
 post_data)
         self.failUnlessEqual(response.status_code, 302) # redirect somewhere
-    
+
     def testBasicEditPost(self):
         """
         A smoke test to ensure POST on edit_view works.
@@ -65,17 +69,45 @@
         post_data = {
             "name": u"This Week in Django",
             # inline data
-            "generic_inline_admin-media-content_type-object_id-TOTAL_FORMS": 
u"2",
-            "generic_inline_admin-media-content_type-object_id-INITIAL_FORMS": 
u"1",
-            "generic_inline_admin-media-content_type-object_id-0-id": u"%d" % 
self.media_pk,
+            "generic_inline_admin-media-content_type-object_id-TOTAL_FORMS": 
u"3",
+            "generic_inline_admin-media-content_type-object_id-INITIAL_FORMS": 
u"2",
+            "generic_inline_admin-media-content_type-object_id-0-id": u"%d" % 
self.mp3_media_pk,
             "generic_inline_admin-media-content_type-object_id-0-url": 
u"http://example.com/podcast.mp3";,
-            "generic_inline_admin-media-content_type-object_id-1-id": u"",
-            "generic_inline_admin-media-content_type-object_id-1-url": u"",
+            "generic_inline_admin-media-content_type-object_id-1-id": u"%d" % 
self.png_media_pk,
+            "generic_inline_admin-media-content_type-object_id-1-url": 
u"http://example.com/logo.png";,
+            "generic_inline_admin-media-content_type-object_id-2-id": u"",
+            "generic_inline_admin-media-content_type-object_id-2-url": u"",
         }
         url = '/generic_inline_admin/admin/generic_inline_admin/episode/%d/' % 
self.episode_pk
         response = self.client.post(url, post_data)
         self.failUnlessEqual(response.status_code, 302) # redirect somewhere
-    
+
+    def testGenericInlineFormset(self):
+        EpisodeMediaFormSet = generic_inlineformset_factory(Media, 
can_delete=False, extra=3)
+        e = Episode.objects.get(name='This Week in Django')
+
+        # Works with no queryset
+        formset = EpisodeMediaFormSet(instance=e)
+        self.assertEquals(len(formset.forms), 5)
+        self.assertEquals(formset.forms[0].as_p(), '<p><label 
for="id_generic_inline_admin-media-content_type-object_id-0-url">Url:</label> 
<input id="id_generic_inline_admin-media-content_type-object_id-0-url" 
type="text" name="generic_inline_admin-media-content_type-object_id-0-url" 
value="http://example.com/podcast.mp3"; maxlength="200" /><input type="hidden" 
name="generic_inline_admin-media-content_type-object_id-0-id" value="1" 
id="id_generic_inline_admin-media-content_type-object_id-0-id" /></p>')
+        self.assertEquals(formset.forms[1].as_p(), '<p><label 
for="id_generic_inline_admin-media-content_type-object_id-1-url">Url:</label> 
<input id="id_generic_inline_admin-media-content_type-object_id-1-url" 
type="text" name="generic_inline_admin-media-content_type-object_id-1-url" 
value="http://example.com/logo.png"; maxlength="200" /><input type="hidden" 
name="generic_inline_admin-media-content_type-object_id-1-id" value="2" 
id="id_generic_inline_admin-media-content_type-object_id-1-id" /></p>')
+        self.assertEquals(formset.forms[2].as_p(), '<p><label 
for="id_generic_inline_admin-media-content_type-object_id-2-url">Url:</label> 
<input id="id_generic_inline_admin-media-content_type-object_id-2-url" 
type="text" name="generic_inline_admin-media-content_type-object_id-2-url" 
maxlength="200" /><input type="hidden" 
name="generic_inline_admin-media-content_type-object_id-2-id" 
id="id_generic_inline_admin-media-content_type-object_id-2-id" /></p>')
+
+        # A queryset can be used to alter display ordering
+        formset = EpisodeMediaFormSet(instance=e, 
queryset=Media.objects.order_by('url'))
+        self.assertEquals(len(formset.forms), 5)
+        self.assertEquals(formset.forms[0].as_p(), '<p><label 
for="id_generic_inline_admin-media-content_type-object_id-0-url">Url:</label> 
<input id="id_generic_inline_admin-media-content_type-object_id-0-url" 
type="text" name="generic_inline_admin-media-content_type-object_id-0-url" 
value="http://example.com/logo.png"; maxlength="200" /><input type="hidden" 
name="generic_inline_admin-media-content_type-object_id-0-id" value="2" 
id="id_generic_inline_admin-media-content_type-object_id-0-id" /></p>')
+        self.assertEquals(formset.forms[1].as_p(), '<p><label 
for="id_generic_inline_admin-media-content_type-object_id-1-url">Url:</label> 
<input id="id_generic_inline_admin-media-content_type-object_id-1-url" 
type="text" name="generic_inline_admin-media-content_type-object_id-1-url" 
value="http://example.com/podcast.mp3"; maxlength="200" /><input type="hidden" 
name="generic_inline_admin-media-content_type-object_id-1-id" value="1" 
id="id_generic_inline_admin-media-content_type-object_id-1-id" /></p>')
+        self.assertEquals(formset.forms[2].as_p(), '<p><label 
for="id_generic_inline_admin-media-content_type-object_id-2-url">Url:</label> 
<input id="id_generic_inline_admin-media-content_type-object_id-2-url" 
type="text" name="generic_inline_admin-media-content_type-object_id-2-url" 
maxlength="200" /><input type="hidden" 
name="generic_inline_admin-media-content_type-object_id-2-id" 
id="id_generic_inline_admin-media-content_type-object_id-2-id" /></p>')
+
+
+        # Works with a queryset that omits items
+        formset = EpisodeMediaFormSet(instance=e, 
queryset=Media.objects.filter(url__endswith=".png"))
+        self.assertEquals(len(formset.forms), 4)
+        self.assertEquals(formset.forms[0].as_p(), '<p><label 
for="id_generic_inline_admin-media-content_type-object_id-0-url">Url:</label> 
<input id="id_generic_inline_admin-media-content_type-object_id-0-url" 
type="text" name="generic_inline_admin-media-content_type-object_id-0-url" 
value="http://example.com/logo.png"; maxlength="200" /><input type="hidden" 
name="generic_inline_admin-media-content_type-object_id-0-id" value="2" 
id="id_generic_inline_admin-media-content_type-object_id-0-id" /></p>')
+        self.assertEquals(formset.forms[1].as_p(), '<p><label 
for="id_generic_inline_admin-media-content_type-object_id-1-url">Url:</label> 
<input id="id_generic_inline_admin-media-content_type-object_id-1-url" 
type="text" name="generic_inline_admin-media-content_type-object_id-1-url" 
maxlength="200" /><input type="hidden" 
name="generic_inline_admin-media-content_type-object_id-1-id" 
id="id_generic_inline_admin-media-content_type-object_id-1-id" /></p>')
+
+
     def testGenericInlineFormsetFactory(self):
         # Regression test for #10522.
         inline_formset = generic_inlineformset_factory(Media,

--

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