我有一个模型Student
,除其他字段外,该模型还包含两个字段。 mob_student
用于存储学生的手机号码,mob_parent
用于存储其父母的手机号码。
我设计了Student
模型,使得只有提供至少一个手机号码时,Student
对象才能成功输入数据库。
由于这种验证需要访问多个字段,因此我创建了以下clean()
方法。
class Student(AbstractUser):
def clean(self):
if not (self.mob_parent or self.mob_student):
raise ValidationError("Please enter at least one mobile number.")
在Django的管理站点中,它可以完美运行:
即使我的模型完全按照我的要求工作,我编写的测试用例似乎还是有缺陷的。
这里有两个测试单位:
test_create_user_with_one_mobile()
测试有效条目。
test_create_user_without_mobile_disallowed()
测试无效的条目。
class StudentModelTest(TestCase):
def setUp(self):
Locality.objects.create(name='Valletta')
School.objects.create(
name='Foobar Academy',
locality=Locality.objects.get(id=1),
type='public',
)
def test_create_user_with_one_mobile(self):
myStudent = Student.objects.create(
email='foobar@gmail.com',
first_name='Thomas',
last_name='Johnson',
school=School.objects.get(id=1),
mob_parent='99112233',
locality=Locality.objects.get(id=1),
)
self.assertTrue(isinstance(myStudent, Student))
def test_create_user_without_mobile_disallowed(self):
myStudent = Student.objects.create(
email='foobar@gmail.com',
first_name='Thomas',
last_name='Johnson',
school=School.objects.get(id=1),
locality=Locality.objects.get(id=1),
)
self.assertFalse(isinstance(myStudent, Student)) # FAILS
在后者中,Student
对象似乎已成功实例化,尽管未指定单个手机号码。怎么这样?