如何在Django中的CreateView中测试get_success_url

时间:2018-02-06 04:29:46

标签: django

我正在尝试在CreateView中为get_success_url方法编写测试,以确保它重定向到新创建的页面。但响应状态代码是405,而不是我预期的302.

views.py

class BlogCreate(CreateView):
    model = Blog
    fields = [‘author’, 'title', ’post’]
    def get_success_url(self):
        return reverse_lazy('blog:blog-detail', kwargs={'slug': self.object.slug})

class BlogList(ListView):
    model = Blog
    ordering = ["-created"]


class BlogDetail(DetailView):
    model = Blog

配置/ urls.py

from django.conf.urls import include, url

urlpatterns = [
    url(r'^blog/', include('blog.url', namespace='blog')),

博客/ urls.py

from django.conf.urls import url
from .views import BlogCreate, BlogList, BlogDetail, BlogEdit, BlogDelete


urlpatterns = [
    url(r'^(?P<slug>[-\w]+)/$', BlogDetail.as_view(), name='blog-detail'),
    url(r'^(?P<slug>[-\w]+)/edit$', BlogEdit.as_view(), name='blog-edit'),
    url(r'^(?P<slug>[-\w]+)/delete$', BlogDelete.as_view(), name='blog-delete'),
    url(r'^new$', BlogCreate.as_view(), name='blog-create'),
    url(r'^$', BlogList.as_view(), name='blog-list'),
]

tests.py

class BlogCreateTest(TestCase):
    def setUp(self):
        self.user = User.objects.create_user(username='john', password='123')

    def test_create_success_url(self):
        post = {‘author’: self.user,
                'title': ‘new blog’,
                ‘article’: ‘text’,
                    }
        response = self.client.post('/blog/new/', post)

        self.assertEqual(response.status_code, 302)
        self.assertRedirects(response, 'blog/new-blog/‘)

1 个答案:

答案 0 :(得分:0)

您是否尝试在测试中执行client.post()

/blog/new/

中删除尾部斜杠