【发布时间】:2018-12-31 14:05:16
【问题描述】:
我从 Django 1.11 升级到 Django 2.0,我的测试开始失败。我有 7 个 TestCase 类,并且都使用 Django 提供的 setUpTestData。当我一起运行它们时,其中一个由于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() 函数,该函数将在 cls.d1 上调用 save()
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 已经在数据库中。所以我猜这是假设这两个对象是不同的......但我调用创建然后保存而不是创建两次。
编辑:在 cmets 中解决:D
【问题讨论】:
-
顺便说一句,您为什么在保存模型后尝试保存医生?
标签: django postgresql django-2.1