Skip to content

Commit

Permalink
Fixed #19545 -- Make sure media/is_multipart work with empty formsets
Browse files Browse the repository at this point in the history
  • Loading branch information
charettes authored and claudep committed Jan 3, 2013
1 parent 9b5f64c commit 3fc43c9
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 5 deletions.
7 changes: 5 additions & 2 deletions django/forms/formsets.py
Expand Up @@ -333,7 +333,10 @@ def is_multipart(self):
Returns True if the formset needs to be multipart, i.e. it Returns True if the formset needs to be multipart, i.e. it
has FileInput. Otherwise, False. has FileInput. Otherwise, False.
""" """
return self.forms and self.forms[0].is_multipart() if self.forms:
return self.forms[0].is_multipart()
else:
return self.empty_form.is_multipart()


@property @property
def media(self): def media(self):
Expand All @@ -342,7 +345,7 @@ def media(self):
if self.forms: if self.forms:
return self.forms[0].media return self.forms[0].media
else: else:
return Media() return self.empty_form.media


def as_table(self): def as_table(self):
"Returns this formset rendered as HTML <tr>s -- excluding the <table></table>." "Returns this formset rendered as HTML <tr>s -- excluding the <table></table>."
Expand Down
19 changes: 16 additions & 3 deletions tests/regressiontests/forms/tests/formsets.py
@@ -1,8 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import unicode_literals from __future__ import unicode_literals


from django.forms import Form, CharField, IntegerField, ValidationError, DateField from django.forms import (CharField, DateField, FileField, Form, IntegerField,
from django.forms.formsets import formset_factory, BaseFormSet ValidationError)
from django.forms.formsets import BaseFormSet, formset_factory
from django.forms.util import ErrorList from django.forms.util import ErrorList
from django.test import TestCase from django.test import TestCase


Expand Down Expand Up @@ -974,11 +975,23 @@ def test_empty_forms_are_unbound(self):
self.assertHTMLEqual(empty_forms[0].as_p(), empty_forms[1].as_p()) self.assertHTMLEqual(empty_forms[0].as_p(), empty_forms[1].as_p())


class TestEmptyFormSet(TestCase): class TestEmptyFormSet(TestCase):
"Test that an empty formset still calls clean()"
def test_empty_formset_is_valid(self): def test_empty_formset_is_valid(self):
"""Test that an empty formset still calls clean()"""
EmptyFsetWontValidateFormset = formset_factory(FavoriteDrinkForm, extra=0, formset=EmptyFsetWontValidate) EmptyFsetWontValidateFormset = formset_factory(FavoriteDrinkForm, extra=0, formset=EmptyFsetWontValidate)
formset = EmptyFsetWontValidateFormset(data={'form-INITIAL_FORMS':'0', 'form-TOTAL_FORMS':'0'},prefix="form") formset = EmptyFsetWontValidateFormset(data={'form-INITIAL_FORMS':'0', 'form-TOTAL_FORMS':'0'},prefix="form")
formset2 = EmptyFsetWontValidateFormset(data={'form-INITIAL_FORMS':'0', 'form-TOTAL_FORMS':'1', 'form-0-name':'bah' },prefix="form") formset2 = EmptyFsetWontValidateFormset(data={'form-INITIAL_FORMS':'0', 'form-TOTAL_FORMS':'1', 'form-0-name':'bah' },prefix="form")
self.assertFalse(formset.is_valid()) self.assertFalse(formset.is_valid())
self.assertFalse(formset2.is_valid()) self.assertFalse(formset2.is_valid())


def test_empty_formset_media(self):
"""Make sure media is available on empty formset, refs #19545"""
class MediaForm(Form):
class Media:
js = ('some-file.js',)
self.assertIn('some-file.js', str(formset_factory(MediaForm, extra=0)().media))

def test_empty_formset_is_multipart(self):
"""Make sure `is_multipart()` works with empty formset, refs #19545"""
class FileForm(Form):
file = FileField()
self.assertTrue(formset_factory(FileForm, extra=0)().is_multipart())

0 comments on commit 3fc43c9

Please sign in to comment.