如何解决如何从 Django 中的特定表单中获取字段类?
我正在尝试为用户名字段编写测试,我想使用 SimpleTestCase.assertFieldOutput()
。问题是我无法从表单的字段中获取字段类:
import django
from django.test import TestCase
class UserRegistrationTest(TestCase):
"""Tests for the user registration page."""
def test_username_field(self):
data = {'username': 'павел25','password1': 'njkdpojv34','password2': 'njkdpojv34','email': 'pav294@mail.ru','first_name': 'Pavel','last_name': 'Shlepnev'}
f = RegistrationForm(data)
self.assertFieldOutput(f.fields['username'],{'pavel25': 'pavel25'},{'павел25': ['Имя пользователя должно содержать только символы ASCII.']})
当我运行测试时,它会引发 TypeError: 'UsernameField' object is not callable
解决方法
这是访问表单数据的方式:
form_data = f.cleaned_data
username = form_data['username']
等等
,包装在 type()
函数中似乎有效。它给了我一个类对象,这是我在 fieldclass
的 SimpleTestCase.assertFieldOutput()
参数中需要的。
>>> type(f.fields['username'])
<class 'django.contrib.auth.forms.UsernameField'>
测试运行没有错误并产生有效的输出:
import django
from django.test import TestCase
class UserRegistrationTest(TestCase):
"""Tests for the user registration page."""
def test_username_field(self):
data = {'username': 'павел25','password1': 'njkdpojv34','password2': 'njkdpojv34','email': 'pav294@mail.ru','first_name': 'Pavel','last_name': 'Shlepnev'}
f = RegistrationForm(data)
self.assertFieldOutput(type(f.fields['username']),{'pavel25': 'pavel25'},{'павел25': ['Имя пользователя должно содержать только символы ASCII.']})
====================================================================== FAIL: test_username_field (accounts.tests.UserRegistrationTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\Users\pavel\source\repos\Speak the Truth\accounts\tests.py",line 43,in test_username_field self.assertFieldOutput(type(f.fields['username']),{'павел25': ['Имя пользователя должно содержать только символы ASCII.']}) File "C:\Users\pavel\source\repos\Speak the Truth\env\lib\site-packages\django\test\testcases.py",line 760,in assertFieldOutput required.clean(input) AssertionError: ValidationError not raised ----------------------------------------------------------------------
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。