django - PostgreSQL psycopg2 错误:没有唯一约束 / InvalidForeignKey
问题描述
我有以下型号:
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
作为主键的唯一约束。
什么可能导致此错误?/我该如何调试?
解决方案
你只需要一步一步地去做。现在您正尝试与尚未在数据库中的表创建外键关系。因此,除了 Contact 模型,应用迁移,然后添加 EventList 等之外,将所有内容都注释掉。如果您依赖于 Contact 模型首先出现的事实,那么在这种情况下它没有帮助。
推荐阅读
- python - QProcess完成信号参数lambda函数
- rotation - 在虚幻中转换旋转以实现平滑运动
- php - “php artisan ui vue --auth”命令和“php artisan ui:auth”有什么区别
- mysql - 使用 MySQL 删除 JSON 字段中的日期对象
- mongodb - 使用 NestJS 的 MongoDB 查询获取没有不需要的数据
- javascript - 节点列表索引访问返回未定义
- c - 方法调用后变量突然超出范围
- python - 将列表传递为具有不完整列表/缺失列表条目的输入参数的优雅方式
- twitter-bootstrap - 使用 wtf.form_field 和 bootstrap 时如何使表单标签和输入字段内联
- sql-server - 如何在 SQL 中连接未定义的连续行?