【发布时间】:2020-06-22 17:56:38
【问题描述】:
我有以下型号:
class Contact(models.Model):
email = models.EmailField()
class EventList(models.Model):
event_contacts = models.ManyToManyField(Contact, through=EventMembership)
class EventMembership(models.Model):
event_list = models.ForeignKey(EventList, null=True, on_delete=models.PROTECT)
event_contact = models.ForeignKey(Contact, null=True, blank=False, on_delete=models.PROTECT)
但是,在完全干净的数据库上应用 EventMembership 的迁移时,我收到以下错误:
psycopg2.errors.InvalidForeignKey:没有唯一约束 匹配引用表“contacts_contact”的给定键
class Migration(migrations.Migration):
initial = True
dependencies = [
('lists', '0001_initial'),
('contacts', '0002_auto_20200308_2253'),
]
operations = [
migrations.CreateModel(
name='EventMembership',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('event_contact', apps.utils.django_multitenant.fields.TenantForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='contacts.Contact')),
('event_list', apps.utils.django_multitenant.fields.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='lists.EventList'))
]
]
表contacts_contact显然有一个唯一约束id作为主键。
什么可能导致此错误? / 我该如何调试?
【问题讨论】:
-
似乎
EventMembership必须对字段 event_list 和 event_contact 具有唯一约束。这当然会在两个字段中丢弃 null=True。 -
@AndreyNelubin 是的,但是(作为元唯一约束添加)但是这将如何引发错误?如果我删除此约束,错误仍然存在?
标签: django postgresql django-models psycopg2