编程语言
首页 > 编程语言> > python – django没有为重复的主键引发IntegrityError

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