Django CBV AttributeError:必须使用对象pk或slug调用通用详细信息视图

时间:2014-09-09 15:29:16

标签: python django tdd

我正在尝试在测试中获得基于类的视图的输出。

factory = RequestFactory()
request = factory.get(item.get_absolute_url()) # get_absolute_url returns '/my-slug-path/'
request.user = UserFactory(username='test', is_staff=False, is_superuser=False)
item_view = ItemDetail.as_view()
response = item_view(request)

当我运行上面的代码时,它会在item_view(request)上出错。

*** AttributeError: Generic detail view ItemDetail must be called with either an object pk or a slug.

我该如何使这项工作? CBV在正常的站点操作中工作正常,但在编写测试时它在此时失败。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

你在这里做的是直接调用视图,而不是通过Django的URL解析器/调度程序。因此,您需要传递视图所期望的参数:在这种情况下,正如错误消息所示,包括slug / pk。所以:

response = item_view(request, item.slug)

然而,更好的测试视图的方法是使用内置的测试客户端对象,这意味着您可以删除该代码的所有并将其替换为:

response = self.client.get(item.get_absolute_url())