【发布时间】:2021-05-22 23:31:53
【问题描述】:
有几十个类似的帖子,但通常 OP 不依赖内置的、自动递增的和已经唯一的 PK 值,因此它们往往有相同的答案。没有人回答我的问题。
在我的 (Django/Postgres) 生产 Google Cloud 服务器上运行 python manage.py migrate 时,我不断收到此错误:
django.db.utils.ProgrammingError: 引用表“api_bookgroup”的给定键没有唯一约束匹配
我知道错误是说“嘿!我不知道要返回哪个记录,因为没有唯一标识符”但是有两件事让我摸不着头脑:
- Django Docs 非常清楚“默认情况下,Django 使用相关对象的主键” - 所以 PK 应该是所需的唯一约束。
- 同样的代码可以在其他 3 台开发机器/数据库上完美运行,包括我们的 Google Cloud 开发实例(尽管每个其他实例在数据库中都有不同的数据)
第 2 点让我想知道 Django/Postgres 是否有可能以某种方式允许两个具有相同 PK 的 bookGroup 记录而不会引发可怕的错误?如果是这样,我将如何找到这些记录,如果没有,还有什么可能导致此错误?
感谢您的帮助!
# api.models.py
class BookGroup(models.Model):
name = models.CharField(max_length=255, default='')
description = models.CharField(max_length=255, blank=True)
code = models.CharField(max_length=255, unique=True)
...
class HistBookGroup(HistoricalRecord):
master_id = models.ForeignKey(BookGroup, on_delete=models.CASCADE, null=True, related_name='historical_data')
name = models.CharField(max_length=255, default='')
...
class HistBookGroup(HistoricalRecord):
master_id = models.ForeignKey(BookGroup, on_delete=models.CASCADE, null=True, related_name='historical_data')
updated_by_user_id = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='hist_bookgroups_updated')
name = models.CharField(max_length=255, default='')
【问题讨论】:
标签: python django postgresql django-models google-cloud-platform