我的Django模型中只有一个主键,但是它显示为多个主键时出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的Django模型中只有一个主键,但是它显示为多个主键时出错相关的知识,希望对你有一定的参考价值。

我的模特是

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时,以上模型运行良好。

答案

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

id = models.AutoField(primary_key=True)

如果要指定自定义主键,请在您的其中一个字段上指定primary_key = True。如果Django看到您已明确设置Field.primary_key,则不会添加自动ID列。

它显示多个主键的原因可能是您在迁移文件上添加了多个主键及其存在。

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

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

以上是关于我的Django模型中只有一个主键,但是它显示为多个主键时出错的主要内容,如果未能解决你的问题,请参考以下文章

访问django formset数据

删除所有实例后,Django 模型实例主键不会重置为 1

在使用 UUID 字段作为主字段的 Django 模型中添加非主键自动字段或“序列”字段

如何在 Django REST 框架中为多对多字段定义“IsOwner”自定义权限?

多个模型 - 一个公共主键 (Django)

如何确保我的 django 应用程序中只有 1 个模型创建迁移?