Django 错误:无效的列名“id”

chi*_*sky 3 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'
Run Code Online (Sandbox Code Playgroud)

功能

我在下面的示例中使用了“抽象”,因为它是一个已知值。

get_initial(self):
    my_template = ReportTemplate.objects.get(name='Abstract')
    return {'abstract': my_template.template}
Run Code Online (Sandbox Code Playgroud)

错误

当应用程序通过这个函数运行时,它返回以下错误:

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

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

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

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

Bry*_*yan 5

根据django docs,该id列是自动创建的。可以通过将另一个属性指定为Model 子类中的主键来覆盖此行为:

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'
Run Code Online (Sandbox Code Playgroud)