【问题标题】:Showing error with imported in Django mysql table在 Django mysql 表中导入时显示错误
【发布时间】:2017-03-03 15:28:02
【问题描述】:

我的models.py中有这样一个模型

class DeviceType(models.Model):
    device_type_id = models.IntegerField(unique=True, blank=True, null=True,db_column='device_type_id')
    device_type_name = models.CharField(max_length=64)

class Meta:
    #  managed = False
    db_table = 'device_type'

对于测试,我尝试将表添加到管理视图,它已添加,但是当我尝试查看结果时出现错误:

(1054, "Unknown column 'device_type.id' in 'field list'")
Request Method: GET
Request URL:    http://172.17.45.9:8001/admin/_my_alfanet_/devicetype/
Django Version: 1.10.6
Exception Type: OperationalError
Exception Value:    
(1054, "Unknown column 'device_type.id' in 'field list'")
Exception Location: /etc/network/scripts/my_alfanet_env/lib/python2.7/site-packages/MySQLdb/connections.py in defaulterrorhandler, line 36
Python Executable:  /etc/network/scripts/my_alfanet_env/bin/python
Python Version: 2.7.9
Python Path:    
['/etc/network/scripts',
 '/etc/network/scripts/ansible/lib',
 '/etc/network/scripts',
 '/etc/network/scripts/my_alfanet_env/lib/python27.zip',
 '/etc/network/scripts/my_alfanet_env/lib/python2.7',
 '/etc/network/scripts/my_alfanet_env/lib/python2.7/plat-linux2',
 '/etc/network/scripts/my_alfanet_env/lib/python2.7/lib-tk',
 '/etc/network/scripts/my_alfanet_env/lib/python2.7/lib-old',
 '/etc/network/scripts/my_alfanet_env/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7',
 '/usr/local/lib/python2.7/plat-linux2',
 '/usr/local/lib/python2.7/lib-tk',
 '/etc/network/scripts/my_alfanet_env/lib/python2.7/site-packages']
Server time:    Fri, 3 Mar 2017 15:18:57 +0000

看起来 django 尝试将它自己的列添加到 sql 请求中,这会产生错误。谁能帮忙,这个问题有什么解决方案?

【问题讨论】:

  • 这个数据库是外部的,它是从另一个项目导入的
  • 你能添加管理视图,admin.py 文件吗?

标签: python mysql django


【解决方案1】:

Django 要求每个模型只有一个主键。 automatically adds a primary key fieldid 为模型,除非您为其他字段之一设置 primary_key=True

在您的情况下,看起来device_type_id 是主键。如果是这样,您可以将模型更改为:

class DeviceType(models.Model):
    device_type_id = models.IntegerField(primary_key=True)
    device_type_name = models.CharField(max_length=64)

我已删除 db_column='device_type_id',因为它与字段名称匹配。我还删除了blank=Truenull=True,因为主键不能为空。

如果您的数据库自动创建device_type_id,那么您应该使用AutoField 而不是IntegerField。如果没有,您必须在数据库中创建新设备类型时手动设置device_type_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    相关资源
    最近更新 更多