【问题标题】:I have only one primary key in my Django Model, but it shows error as multiple primary key我的 Django 模型中只有一个主键,但它显示错误为多个主键
【发布时间】:2020-01-18 17:26:58
【问题描述】:

我的模特是

class authenticate(models.Model):
    name=models.CharField(max_length=50)
    uid=models.CharField(max_length=39,editable=False)
    image=models.CharField(max_length=250)
    email=models.CharField(max_length=100,primary_key=True)
    mobile=models.CharField(max_length=12)
    dob=models.CharField(max_length=12)
    regno=models.CharField(max_length=10,editable=False)
    created=models.CharField(max_length=10,editable=False)
    last_login=models.CharField(max_length=10)
    department=models.CharField(max_length=5)
    admin=models.BooleanField(default=False)

尝试在 Heroku 存储库中迁移我的模型时发生错误:

psycopg2.errors.InvalidTableDefinition: multiple primary keys for table "Auth_authenticate" are not allowed


The above exception was the direct cause of the following exception:

--
--
--
    return self.cursor.execute(sql, params)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: multiple primary keys for table "Auth_authenticate" are not allowed

当我使用 sqlite DB 时,上述模型运行良好。

【问题讨论】:

  • 尝试:email=models.ForeignKey() 然后makemigratemigrate 命令
  • 还是同样的错误@YeganehSalami
  • 你能重命名你的班级吗?也许你与Auth模块的表名有冲突
  • 如果你没有为模型中的任何字段指定primary_key=True,Django会自动添加一个AutoField来保存主键,所以你不需要在任何一个上设置primary_key=True您的字段,除非您想覆盖默认的主键行为。 stackoverflow.com/questions/43244862/…
  • 尝试从头开始迁移

标签: python django heroku


【解决方案1】:

默认情况下,Django 为每个模型提供以下字段:

id = models.AutoField(primary_key=True)

如果您想指定自定义主键,请在其中一个字段上指定 primary_key=True。如果 Django 看到你明确设置了 Field.primary_key,它不会添加自动 id 列。

它显示多个主键的原因可能是您添加了多个主键并且它存在于迁移文件中。

解决方案 1。 删除您的表(或架构)和迁移文件,然后重新迁移。

解决方案 2。 打开您的迁移文件,查找具有多个主键的表,然后删除一个并迁移

【讨论】:

  • 如果你在另一个字段上指定primary_key,Django不会添加id字段。
  • 错误:Auth.authenticate.id: (fields.E100) AutoFields 必须设置 primary_key=True。
  • 您应该清除该应用的迁移文件并再次运行您的 make migration 命令
  • @NaqibHakimi 我正在将我的代码推送到 Heroku 应用程序并将其迁移到那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
  • 2016-04-02
相关资源
最近更新 更多