django - Django 测试不验证 null=False 约束
问题描述
我有一个不同领域的模型。其中之一是 CharField
field = models.CharField(max_length=100, blank=False, null=False)
现在,当我在 django 测试类函数“setUpTestData”中创建一个没有此字段的对象时,它不会给出任何错误。如果我将 minLengthValidator 添加到它,那么它也不会给出任何
models.CharField(blank=False, null=False, max_length=100, validators=[MinLengthValidator(1)])
当我在创建对象后打印它时,它会给出一个空字符串。
我有另一个领域:
field2 = models.DateTimeField(blank=False, null=False)
现在,如果我在创建对象时不提供此数据,则测试将正确失败。
class Bag(models.Model):
created_on = models.DateTimeField(default=timezone.now)
order_id = models.CharField(blank=False, null=False, max_length=100)
order_created_time = models.DateTimeField(blank=False, null=False)
class SalesBagTestCase(TestCase):
@classmethod
def setUpTestData(cls):
Bag.objects.create(order_created_time=datetime.now())
def test_bag(self):
bag_response = self.client.get('http://localhost:8000/bag/')
self.assertEqual(bag_response.status_code, 200)
即使我删除了 setUpData 方法中的 order_id 字段,AssertEqual 也是 True
解决方案
class Bag(models.Model):
created_on = models.DateTimeField(default=timezone.now)
order_id = models.CharField(blank=False, null=False, max_length=100)
order_created_time = models.DateTimeField(blank=False, null=False)
class SalesBagTestCase(TestCase):
bag = None
@classmethod
def setUpTestData(cls):
bag = Bag.objects.create(order_created_time=datetime.now())
cls.bag = bag
def test_bag(self):
bag_response = self.client.get('http://localhost:8000/bag/')
self.bag.full_clean()
self.assertEqual(bag_response.status_code, 200)
这指出我们需要在 pre-save 信号中使用 full_clean() 方法。
推荐阅读
- javascript - 将数据从长格式转换为宽格式
- python - 为每个创建的用户创建一个新表
- python - 使用 fsolve 求解一组方程,其中一个是每次迭代都会改变的 sigma 函数
- xcode - 无法让 Crashlytics 处理 dSYM
- javascript - UseState 更新对象数组中的多个属性
- bash - Bash 不会使用循环创建所有文件和目录
- javascript - 使用 fetch js 从 api 获取 json
- javascript - 从 REACT 更新 SQL 帖子
- c - 一个作业的单个进程可以属于多个组吗?
- python - 有没有办法让这段代码在计算机上的负担更少?