Django错误:列名'id'无效

时间:2013-12-31 19:27:35

标签: python sql-server django django-models pyodbc

我很难理解为什么我的一个查询失败了。

我正在使用pyodbc连接到Django应用程序上的SQL Server数据库。我的所有其他查询都运行正常,除了一个。以下是相关信息:

模型

class ReportTemplate(models.Model):
    name = models.TextField(db_column='Name', blank=True)
    template = models.TextField(db_column='Template', blank=True)

    class Meta:
        db_table = 'ReportTemplateTbl'

功能

我在下面的例子中使用了'Abstract',因为它是一个已知值。

get_initial(self):
    my_template = ReportTemplate.objects.get(name='Abstract')
    return {'abstract': my_template.template}

错误

当应用程序运行此函数时,它将返回以下错误:

  

('42S22',“[42S22] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无效的列名'id'。(207)(SQLExecDirectW); [42000] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]语句无法准备。(8180)“)

变量信息似乎表明pyodb正在尝试搜索

  

u'SELECT [ReportTemplateTbl]。[id] ,[ReportTemplateTbl]。[Name],[ReportTemplateTbl]。[Template] FROM [ReportTemplateTbl] WHERE [ReportTemplateTbl]。[Name] =? “

我真的很想了解我在这里做错了什么,并试图避免进行手动查询。提前谢谢!

1 个答案:

答案 0 :(得分:2)

根据django docsid列会自动创建。 Model子类中的specifying another attribute as the primary key可以覆盖此行为:

class ReportTemplate(models.Model):
    name = models.TextField(db_column='Name', blank=True, primary_key=True)
    template = models.TextField(db_column='Template', blank=True)

    class Meta:
        db_table = 'ReportTemplateTbl'