我从 Django 1.11 升级到 Django 2.0,我的测试开始失败。我有 7TestCase
个类,都使用setUpTestData
Django 提供的。当我将它们全部一起运行时,其中一个由于psycopg2.IntegrityError: duplicate key value violates unique constraint "doctors_doctor_pkey"
.
当我TestCase
单独运行其中一个类时,它工作正常。似乎它们在某种程度上相互影响,但奇怪的是升级到 Django 2.0 后它会失败。我也注意到它不是在create()
它是在save()
。
在dashboards
应用程序的设置中,我有一些创建数据:
cls.d1 = doctor_models.Doctor.objects.create(email="johndoe@example.com", name="John Doe",
specialization=cls.s1, premium=True,
premium_price=4310, consultation_price=341)
...
cls.b1 = doctor_models.DoctorBooking.objects.create(clinic=cls.c1, doctor=cls.d1,
status=2, premium_booking=True,
patient_name="example",
patient_phone_number="+9747721234",
confirmed_date=datetime.strptime(
"16 Jun 2017 14:22:26:000 +0300",
receive_format),
handled_on=datetime.strptime(
"17 Jun 2017 14:22:26:000 +0300",
receive_format))
上面的第二行将调用它的save()
函数save()
cls.d1
def save(self, *args, **kwargs):
if self.doctor.premium:
self.premium_booking = True
else:
self.premium_booking = False
super(DoctorBooking, self).save(*args, **kwargs)
self.doctor.save() # <- here it raises an IntegrityError
这是我可以提取的最简单的代码,但是这发生在不同的类中。
重申这一点给了我以下信息。
psycopg2.IntegrityError: duplicate key value violates unique constraint "doctors_doctor_pkey"
DETAIL: Key (id)=(7) already exists.
我什至不确定为什么会这样。当您创建一个对象时,不应该psycopg2
考虑自动递增pk
? 据我所知,数据库没有任何问题,当我在数据库之前添加一个断点.save()
并检查数据库时,一个具有相同数据并且pk
已经在数据库中的医生。所以我猜它假设这两个对象是不同的......但我调用创建然后保存而不是创建两次。
编辑:在评论中解决:D