Commit 795ac7de authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #19378 -- Ensured get_success_url returns a non-lazy URL

parent 501c7a22
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
from django.forms import models as model_forms
from django.core.exceptions import ImproperlyConfigured
from django.http import HttpResponseRedirect
from django.utils.encoding import force_text
from django.views.generic.base import TemplateResponseMixin, ContextMixin, View
from django.views.generic.detail import (SingleObjectMixin,
                        SingleObjectTemplateResponseMixin, BaseDetailView)
@@ -50,7 +51,8 @@ class FormMixin(ContextMixin):
        Returns the supplied success URL.
        """
        if self.success_url:
            url = self.success_url
            # Forcing possible reverse_lazy evaluation
            url = force_text(self.success_url)
        else:
            raise ImproperlyConfigured(
                "No URL to redirect to. Provide a success_url.")
+9 −0
Original line number Diff line number Diff line
@@ -20,6 +20,15 @@ class FormMixinTests(TestCase):
         initial_2 = FormMixin().get_initial()
         self.assertNotEqual(initial_1, initial_2)


class BasicFormTests(TestCase):
    urls = 'regressiontests.generic_views.urls'

    def test_post_data(self):
        res = self.client.post('/contact/', {'name': "Me", 'message': "Hello"})
        self.assertRedirects(res, 'http://testserver/list/authors/')


class ModelFormMixinTests(TestCase):
    def test_get_form(self):
        form_class = views.AuthorGetQuerySetFormView().get_form_class()
+5 −0
Original line number Diff line number Diff line
@@ -11,3 +11,8 @@ class AuthorForm(forms.ModelForm):

    class Meta:
        model = Author


class ContactForm(forms.Form):
    name = forms.CharField()
    message = forms.CharField(widget=forms.Textarea)
+2 −2
Original line number Diff line number Diff line
@@ -6,6 +6,6 @@ from .dates import (ArchiveIndexViewTests, YearArchiveViewTests,
    MonthArchiveViewTests, WeekArchiveViewTests, DayArchiveViewTests,
    DateDetailViewTests)
from .detail import DetailViewTest
from .edit import (FormMixinTests, ModelFormMixinTests, CreateViewTests,
    UpdateViewTests, DeleteViewTests)
from .edit import (FormMixinTests, BasicFormTests, ModelFormMixinTests,
    CreateViewTests, UpdateViewTests, DeleteViewTests)
from .list import ListViewTests
+4 −0
Original line number Diff line number Diff line
@@ -56,6 +56,10 @@ urlpatterns = patterns('',
    (r'^detail/nonmodel/1/$',
        views.NonModelDetail.as_view()),

    # FormView
    (r'^contact/$',
        views.ContactView.as_view()),

    # Create/UpdateView
    (r'^edit/artists/create/$',
        views.ArtistCreate.as_view()),
Loading