Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用包含ModelChoiceField的表单测试django视图_Python_Django_Unit Testing_Django Forms - Fatal编程技术网

Python 使用包含ModelChoiceField的表单测试django视图

Python 使用包含ModelChoiceField的表单测试django视图,python,django,unit-testing,django-forms,Python,Django,Unit Testing,Django Forms,以下是我用来向视图发送数据的表单: 类注册表执行(forms.Form): username=forms.CharField(widget=forms.TextInput(attrs={ “类”:“窗体控件”, “占位符”:(用户名) })) password=forms.CharField(widget=forms.PasswordInput(attrs={ “类”:“窗体控件”, “占位符”:(“密码”) })) roles=forms.modelcooicefield(queryset=R

以下是我用来向视图发送数据的表单:

类注册表执行(forms.Form):
username=forms.CharField(widget=forms.TextInput(attrs={
“类”:“窗体控件”,
“占位符”:(用户名)
}))
password=forms.CharField(widget=forms.PasswordInput(attrs={
“类”:“窗体控件”,
“占位符”:(“密码”)
}))
roles=forms.modelcooicefield(queryset=Role.objects.exclude(Role\u name=“Admin”),widget=forms.Select(attrs={
“类”:“窗体控件”,
}))
下面是am测试的视图,其中包含表单:

def寄存器(请求):
user=request.user
当前用户=CustomUser.objects.get(用户名=user.username)
如果当前_user.role.role_name==“Admin”:
register\u form=RegisterForm(request.POST)
如果request.method==“POST”:
如果注册表表单有效():
用户名=注册表格。已清理的数据['username']
密码=注册表格。已清除的数据['password']
角色=注册表格。已清理的数据['roles']
如果CustomUser.objects.filter(用户名=用户名).exists():
messages.error(请求,_('用户名已存在'))
其他:
新建用户=CustomUser.objects.create用户(用户名=用户名,密码=密码,角色=角色)
messages.success(请求,u('User created Successfully'))
返回重定向(“user\u details”,pk=new\u user.pk)
其他:
register\u form=RegisterForm(request.POST)
上下文={
“注册表格”:注册表格,
}
返回呈现(请求'register.html',上下文)
其他:
messages.error(请求,\不允许您查看此页)
返回重定向('索引')
下面是我如何通过发送带有数据的post请求(
reverse
)来测试它:

def测试\u请求后\u纠正日期(自我):
调用_命令(“启动_应用程序”)
self.client.login(用户名='user',密码='pass')
服务员角色=role.objects.get(role\u name=“服务员”)
url=反向('寄存器')
数据={
“用户名”:“新用户”,
“密码”:“刚刚好的密码”,
“角色”:服务员_role.pk
}
response=self.client.post(url、数据、follow=True)
self.assertEqual(response.status_代码,302)
new\u user=CustomUser.objects.get(username=“new\u user”)
assertRedirects(响应,反向('user_details',args={“pk”:new_user.pk}))
self.assertTemplateUsed(响应“user\u profile.html”)
请注意,
call\u命令(“start\u app”)
是创建我从中选择的角色的自定义命令

我得到这个错误:

    self.assertEqual(response.status_code, 302)
AssertionError: 200 != 302

我不是这方面的专家,但我相信如果您在帖子中设置
follow=true
,则响应中的
状态\u code
将设置为
重定向链的最后一个元素的
状态\u code
,即200

这基本上就是assertRedirects检查的内容,因此我认为这里的状态代码的“手动”检查

self.assertEqual(response.status_code, 302)
是不必要的,可以删除