Skip to content

Commit

Permalink
Fixed #19378 -- Ensured get_success_url returns a non-lazy URL
Browse files Browse the repository at this point in the history
  • Loading branch information
claudep committed Dec 4, 2012
1 parent 501c7a2 commit 795ac7d
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 5 deletions.
4 changes: 3 additions & 1 deletion django/views/generic/edit.py
@@ -1,6 +1,7 @@
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)
Expand Down Expand Up @@ -50,7 +51,8 @@ def get_success_url(self):
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.")
Expand Down
9 changes: 9 additions & 0 deletions tests/regressiontests/generic_views/edit.py
Expand Up @@ -20,6 +20,15 @@ def test_initial_data(self):
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()
Expand Down
5 changes: 5 additions & 0 deletions tests/regressiontests/generic_views/forms.py
Expand Up @@ -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)
4 changes: 2 additions & 2 deletions tests/regressiontests/generic_views/tests.py
Expand Up @@ -6,6 +6,6 @@
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 changes: 4 additions & 0 deletions tests/regressiontests/generic_views/urls.py
Expand Up @@ -56,6 +56,10 @@
(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()),
Expand Down
11 changes: 9 additions & 2 deletions tests/regressiontests/generic_views/views.py
Expand Up @@ -2,11 +2,11 @@

from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator
from django.core.urlresolvers import reverse
from django.core.urlresolvers import reverse, reverse_lazy
from django.utils.decorators import method_decorator
from django.views import generic

from .forms import AuthorForm
from .forms import AuthorForm, ContactForm
from .models import Artist, Author, Book, Page, BookSigning


Expand Down Expand Up @@ -75,6 +75,13 @@ def get_paginator(self, queryset, page_size, orphans=0, allow_empty_first_page=T
orphans=2,
allow_empty_first_page=allow_empty_first_page)


class ContactView(generic.FormView):
form_class = ContactForm
success_url = reverse_lazy('authors_list')
template_name = 'generic_views/form.html'


class ArtistCreate(generic.CreateView):
model = Artist

Expand Down

0 comments on commit 795ac7d

Please sign in to comment.