我正在将 Django 与 MySQL 一起使用,并且在使用“inspectdb”命令创建我的 models.py 文件后遇到问题。
下载:
CREATE TABLE YDB_Collects (
COriginal_Data_Type_ID VARCHAR(16) NOT NULL,
CTask_Name VARCHAR(16) NOT NULL,
PRIMARY KEY (COriginal_Data_Type_ID, CTask_Name),
INDEX FK_COLLECTS_TASK (CTask_Name),
CONSTRAINT FK_COLLECTS_ORIGINAL_DATA_TYPE FOREIGN KEY (COriginal_Data_Type_ID) REFERENCES YDB_Original_Data_Type (Original_Data_Type_ID),
CONSTRAINT FK_COLLECTS_TASK FOREIGN KEY (CTask_Name) REFERENCES YDB_Task (Task_Name)
)
如您所见,COriginal_Data_Type_ID
andCTask_Name
是外键,也是复合主键。
对于这个 DDL,Django 的“inspectdb”命令给出了这个模型:
class YdbCollects(models.Model):
coriginal_data_type = models.ForeignKey('YdbOriginalDataType', db_column='COriginal_Data_Type_ID') # Field name made lowercase.
ctask_name = models.ForeignKey('YdbTask', db_column='CTask_Name') # Field name made lowercase.
class Meta:
managed = False
db_table = 'ydb_collects'
unique_together = (('COriginal_Data_Type_ID', 'CTask_Name'),)
但是当我运行“makemigrations”命令时,它给了我错误信息:
“unique_together”指的是不存在的字段“COriginal_Data_Type_ID”和“CTask_Name”
当我改变时:
unique_together = (('COriginal_Data_Type_ID', 'CTask_Name'),)
进入:
unique_together = (('coriginal_data_type', 'ctask_name'),)
然后是的,一切正常。但这是正确的方法吗?似乎代码与我的 DDL 具有不同的架构。我定义的原始外键是数据类型的 ID,而不是数据类型本身。
我在这里做错了吗?我的COriginal_Data_Type_ID
和CTask_Name
领域在哪里?