为什么在setUpTestData中创建的ManyToMany关系会导致重复的键错误?

时间:2020-07-07 19:06:33

标签: python django python-unittest django-testing django-unittest

我正在使用PostgreSQL 12。

我有以下型号:

.txt

...以及以下DEBUG类:

org.springframework.integration

当我独立运行这些测试时,测试通过。当我运行它们时 在一起,我在class Publication(models.Model): title = models.CharField(max_length=30) class Article(models.Model): headline = models.CharField(max_length=100) publications = models.ManyToManyField(Publication) 方法下收到以下错误 TestCase

psycopg2.errors.UniqueViolation:重复的键值违反唯一 约束“ article_pkey”详细信息:密钥(id)=(1)已经存在。

进一步的试验和错误使我发现仅发生此错误 当我为class TestA(TestCase): @classmethod def setUpTestData(cls): p = Publication.objects.create() for _ in range(5): m = Article.objects.create() m.publications.add(p) def test_1(self): self.assertEqual(True, True) class TestB(TestCase): @classmethod def setUpTestData(cls): print(Article.objects.all()) for _ in range(5): a = Article.objects.create() print(a.pk) def test_2(self): self.assertEqual(True, True) 包括setUpTestData关系时:

TestB

第一个ManyToMany语句显示一个空查询集,因此TestA m.publications.add(p) 的方法似乎有效,但是第一个print()的{​​{1}}是tearDownClass,这在我看来很奇怪,因为Postgres PK是从Sequence对象生成的,永不回滚。

这是怎么回事?

  • TestA的第一个pk pk应该以{{1​​}}开头吗?
  • 为什么会出现重复错误?这与Article有何联系 关系,我该如何解决或进一步调试它?

0 个答案:

没有答案