Django 2.0
我有以下型号:
class Visitor(models.Model):
TYPE_CHOICES = (
('P', 'Person'),
('E', 'Employee'),
)
type = models.CharField(choices=TYPE_CHOICES, max_length=1)
first_name = models.CharField(max_length=40)
last_name = models.CharField(max_length=40)
birth_date = models.DateField()
street_address = models.CharField(max_length=100)
city = models.CharField(max_length=40)
在我的网址中,我有以下网址:
# ex: /my_app/P/visit_information/
path('<str:visitor_type>/visit_information/', views.visit_information, name='visit_information'),
我正在尝试为此编写一些测试并遇到问题。
我希望我的测试只是告诉我它是否返回状态200:
def test_parent_visit_information_returns_200(self):
"""
visit_information page returns a 200
"""
client = Client()
response = client.get(reverse('visit_information', args={'visitor_type':'P'}))
self.assertEqual(response.status_code, 200)
但是我收到以下错误:
visit_information() got an unexpected keyword argument 'visitor_type'
处理反向查找的最佳方法是什么?我怎么能提供'P'或'E',所以它会返回200代码?
我是否在测试中不正确地处理了URL?
已编辑添加:
如果我尝试kwargs
而不是args
,我会看到此错误:
visit_information() got an unexpected keyword argument 'visitor_type'
已编辑添加视图:
def visit_information(request):
return render(request, 'my_app/visit_information.html', {
})
答案 0 :(得分:1)
首先,{'visitor_type':'P'}
是字典,因此您应该使用kwargs
,而不是args
:
response = client.get(reverse('visit_information', kwargs={'visitor_type':'P'}))
或者,您可以将args
与列表一起使用:
response = client.get(reverse('visit_information', args=['P']}))
一旦解决了问题,您就会收到TypeError
,因为visit_information
视图缺少其签名中的visitor_type
。它应该是:
def visit_information(request, visitor_type):
return render(request, 'my_app/visit_information.html', {})