python – django没有为重复的主键引发IntegrityError
作者:互联网
django是否强制主键的唯一性?
文档here似乎建议如此,但是当我将类定义为:
class Site(models.Model):
id = models.IntegerField(primary_key=True)
并在测试用例中测试此约束:
class SiteTestCase(TestCase):
def setUp(self):
self.site = Site(id=0, name='Site')
self.site.save()
def tearDown(self):
self.site.delete()
def test_unique_id(self):
with self.assertRaises(IntegrityError):
badSite = Site(id=0, name='Bad Site')
badSite.save()
badSite.delete()
测试失败了.
如果我在普通字段上测试(primary_key = False,unique = True),则会正确引发异常.在id字段上设置unique = True不会更改结果.
我在这里缺少关于primary_key字段的东西吗?
我的数据库后端是MySQL,如果这是相关的.
解决方法:
你的测试方法是错误的.你在这里做的是更新现有实例,因为你提供了一个已经使用过的主键.将保存更改为force_insert,如下所示.
def test_unique_id(self):
with self.assertRaises(IntegrityError):
badSite = Site(id=0, name='Bad Site')
badSite.save(force_insert=True)
badSite.delete()
django文档解释了django knows whether to UPDATE or INSERT.你应该阅读那一节.
你知道django已经支持自动主键吗?有关更多说明,请参见the documentation.
标签:python,django,django-testing 来源: https://codeday.me/bug/20190629/1329280.html