2

MySQL で Django を使用していますが、「inspectdb」コマンドを使用して models.py ファイルを作成した後に問題が発生しました。

DDL:

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_IDCTask_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'),)

それならOKです。しかし、これは正しい方法ですか?コードのスキーマが私の DDL とは異なるようです。私が定義した元の外​​部キーは、データ型自体ではなく、データ型の ID でした。

ここで何か間違ったことをしましたか?そして、私のフィールドはどこにCOriginal_Data_Type_IDありますか?CTask_Name

4

1 に答える 1