【发布时间】:2019-09-05 20:22:52
【问题描述】:
我尝试使用 django 创建一个 Web 应用程序并连接到 SQL Server 数据库。我用来以 django 形式显示数据的表由 2 列组成。它们都是外键,它们共同构建表的主键
创建表 [dbo].[MyTable]( [ID_Field1] [int] NOT NULL, [ID_Field2] [int] 非空,约束 [PK_Movies2Genres] PRIMARY 键集群([ID_Field1] ASC,[ID_Field2] ASC)与(PAD_INDEX = 关闭,STATISTICS_NORECOMPUTE = 关闭,IGNORE_DUP_KEY = 关闭, ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [主要]
ALTER TABLE [dbo].[MyTable] WITH CHECK ADD CONSTRAINT [FK_Field2] FOREIGN KEY([ID_Field2]) REFERENCES [dbo].[Table2] ([ID_Field2])
ALTER TABLE [dbo].[MyTable] 检查约束 [FK_Field2]
ALTER TABLE [dbo].[MyTable] WITH CHECK ADD CONSTRAINT [FK_Field1] FOREIGN KEY([ID_Field1]) REFERENCES [dbo].[Table1] ([ID_Movie])
ALTER TABLE [dbo].[MyTable] 检查约束 [FK_Field1]
现在,django 显然无法创建与这种 sql 表结构对应的模型,即它无法创建包含多个字段的主键。相反,它在 2 列之一和它设置的模型类的元部分中设置主键
unique_together = (('id_field1', 'id_field2'),)
完整模型:
类 MyTable(models.Model):
id_field1 = models.ForeignKey(Table1, on_delete=models.DO_NOTHING, db_column='ID_Field1') id_field2 = models.ForeignKey(Table2, on_delete=models.DO_NOTHING, db_column='ID_Field2') class Meta: managed = False db_table = 'MyTable' unique_together = (('id_field1', 'id_field2'),)
但是,这是 django inspectdb 告诉我的。我知道当没有定义主键时,django 会自动创建一个名为 id 的字段。尽管定义了主键,但这里似乎就是这种情况。知道如何处理这个问题吗?
【问题讨论】:
标签: django django-models django-forms django-templates django-views