我正在使用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
有何联系
关系,我该如何解决或进一步调试它?