【问题标题】:django: Primary key issue when saving modelform into postgresqldjango:将modelform保存到postgresql时的主键问题
【发布时间】:2021-01-26 06:40:56
【问题描述】:

我有一个带有 au 自动字段的模型,它的主键如下:

class historical_recent_data(models.Model):
    id = models.AutoField(primary_key=True, auto_created = True)
    reference = models.CharField(max_length=100, verbose_name= 'reference')
    Date = models.DateField()
    Quantity = models.FloatField(default=0)
    NetAmount = models.FloatField(default=0)
    
    def __str__(self):
        return self.reference

现在,当我想使用模板中的表单将数据输入到 db 表中时,Django 尝试将 id 字段的值设为 1,从而导致以下错误:

duplicate key value violates unique constraint "dashboard2_historical_recent_data2_pkey1"
DETAIL:  Key (id)=(2) already exists.

这个db表有11000多个值,为什么django在新的表单被投到表的时候不会自动生成pk为11001?

更新:我最初的问题是为什么自动字段从 1 递增而不是从表中最大的 pk 值开始递增。

【问题讨论】:

  • 您有id 和Id 字段?请不要。大多数数据库都有不区分大小写的列匹配,所以列FOO和foo是一样的。
  • 是的,哈哈,这是一个试用项目,Id实际上是指零件的序列号。确定它会在以后引起问题,但到目前为止,在我进行实验时它仍然存在,我认为这不是手头问题的根源,或者是吗?
  • 好吧,我强烈建议给它另一个名称,或者至少指定一个具有不同值的db_column=... 参数。可能有冲突。
  • 好的,我试试看
  • 将 ID 更改为其他内容并没有成功

标签: django postgresql


【解决方案1】:

只需删除 id 字段。

class historical_recent_data(models.Model):
    # id = models.AutoField(primary_key=True, auto_created = True)
    reference = models.CharField(max_length=100, verbose_name= 'reference')
    Date = models.DateField()
    Quantity = models.FloatField(default=0)
    NetAmount = models.FloatField(default=0)
    
    def __str__(self):
        return self.reference

【讨论】:

  • 刚试了一下,并没有改变输出,我不明白哪里出了问题
  • 注释此行 id = models.AutoField(primary_key=True, auto_created = True) 并删除数据库或数据库文件。如果您使用的是 sqlite。运行命令 1) python manage.py makemigrations 2) python manage.py migrate 如果它仍然不起作用。还从迁移文件夹中删除除 __init.py 文件之外的所有文件。重试迁移和迁移
  • 我使用 postgresql
  • 删除数据库并在另一个同名的数据库上创建。而不是再次遵循这些步骤
  • 我已经尝试了你的建议,但我仍然遇到同样的问题
猜你喜欢
  • 2017-06-29
  • 2010-10-18
  • 2020-11-15
  • 2012-07-03
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
相关资源
最近更新 更多