【问题标题】:Django OperationalError, lacking id columnDjango OperationalError,缺少 id 列
【发布时间】:2018-04-15 19:41:18
【问题描述】:

我无法显示我新创建的表 (blog_sp500_post_noid_sorted)。每当我尝试在管理页面下打开表格时,都会收到以下错误消息:

OperationalError at /admin/blog/sp500_post_noid_sorted/
no such column: blog_sp500_post_noid_sorted.id
Request Method: GET
Request URL:    http://127.0.0.1:8000/admin/blog/sp500_post_noid_sorted/
Django Version: 1.8
Exception Type: OperationalError
Exception Value:    
no such column: blog_sp500_post_noid_sorted.id
Exception Location: C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py in execute, line 318
Python Executable:  C:\Python27\python.exe
Python Version: 2.7.9
Python Path:    
['C:\\Python27\\djangogirls\\mysite',
 'C:\\Windows\\system32\\python27.zip',
 'C:\\Python27\\DLLs',
 'C:\\Python27\\lib',
 'C:\\Python27\\lib\\plat-win',
 'C:\\Python27\\lib\\lib-tk',
 'C:\\Python27',
 'C:\\Python27\\lib\\site-packages']
Server time:    Sun, 15 Apr 2018 11:30:20 -0700

该表是通过使用 SQLite 命令从数据库中的现有表中插入列而创建的。 我注意到在 Django 中总是为模型创建一个“id”列。但是,使用 SQLite 命令创建的表没有这样的 id 列。 Django有什么办法可以忽略id列的缺失还是我必须手动创建一个id列?

我在通过 SQLite 命令创建表后添加了以下模型:

class sp500_post_NoID_sorted(models.Model):
    Day = models.DateField(blank=False, default=datetime.date.today().strftime('%Y-%m-%d'))
    Symbol = models.CharField(max_length=20, default='N/A')
    LastPrice = models.CharField(max_length=30, default='N/A')
    FiftyTwoWkChg = models.CharField(max_length=30, default='N/A')
    FiftyTwoWkHi = models.CharField(max_length=30, default='N/A')
    FiftyTwoWkLo = models.CharField(max_length=30, default='N/A')
    DivYild = models.CharField(max_length=30, default='N/A')
    TrailPE = models.CharField(max_length=30, default='N/A')
    ForwardPE = models.CharField(max_length=30, default='N/A')
    PEG_Ratio = models.CharField(max_length=30, default='N/A')
    PpS = models.CharField(max_length=30, default='N/A')
    PpB = models.CharField(max_length=30, default='N/A')
    Market_Cap = models.CharField(max_length=30, default='N/A')
    Free_Cash_Flow = models.CharField(max_length=30, default='N/A')
    Market_per_CashFlow = models.CharField(max_length=30, default='N/A')
    Enterprise_per_EBITDA = models.CharField(max_length=30, default='N/A')
    Name = models.CharField(max_length=50, default='N/A')

【问题讨论】:

  • 您的型号是如何指定的?它不需要 id 字段,但确实需要主键
  • 发布您的 models.py,我可以尝试进一步提供帮助。

标签: django sqlite django-models


【解决方案1】:

如果您的模型是在 Django 中定义的,您应该能够在相应的列上设置主键。

查看documentation 并向下滚动到primary_key。将该选项添加到作为主键的模型字段中,然后进行迁移和迁移。

【讨论】:

  • 我从来没有为我的任何模型字段指定primary_key状态,Django自动将具有primary_key属性的“id”字段添加到models.py中指定的任何新模型。我是否必须向使用 SQLite 命令创建的任何新表添加 id 字段?或者在使用 SQLite 创建新表时是否有惯用的方法?请查看我为新表添加的模型的编辑问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 2021-01-17
  • 2022-01-02
  • 2021-04-05
  • 1970-01-01
  • 2015-02-25
相关资源
最近更新 更多