Djangoで以下のモデルを作成します。djangoのテーブルから行を削除できないような外部キー制約
class ClientsModel(models.Model):
sys_id = models.AutoField(primary_key=True, null=False, blank=True)
tenant_sys_id = models.ForeignKey('tenant.TenantModel', on_delete = models.SET_NULL, null=True, blank=True)
last_name = models.CharField(max_length=40, null=True, blank=True)
# and few more rows.
ここで、tenant_sys_idは外部キーです。私はon_delete = models.SET_NULLを設定します。つまり、TenantModelからエントリを削除すると(entry1と言うことができます)、tenant_sys_idがentry1であるすべての行の列tenant_sys_idがNULLに設定されます。私はここに居ます?
はいの場合 - 次に、次の質問です。 mysqlからテナント表からエントリを削除しようとすると、エラーが表示されます。
ここにテーブル構造があります。
Table: clients
Create Table: CREATE TABLE `clients` (
`sys_id` int(11) NOT NULL AUTO_INCREMENT,
`last_name` varchar(40) DEFAULT NULL,
`first_name` varchar(40) NOT NULL,
`middle_name` varchar(40) DEFAULT NULL,
`display_name` varchar(140) NOT NULL,
`is_business` tinyint(1) NOT NULL,
`is_active` tinyint(1) NOT NULL,
`is_vendor` tinyint(1) NOT NULL,
`is_authorized_to_expense` tinyint(1) NOT NULL,
`relation` bigint(20) DEFAULT NULL,
`dob` date DEFAULT NULL,
`gender` bigint(20) DEFAULT NULL,
`created_when` datetime DEFAULT NULL,
`created_by` bigint(20) DEFAULT NULL,
`last_updated_when` datetime DEFAULT NULL,
`last_updated_by` bigint(20) DEFAULT NULL,
`notes` varchar(2048) DEFAULT NULL,
`head_of_family_id` int(11) DEFAULT NULL,
`tenant_sys_id_id` int(11) DEFAULT NULL,
PRIMARY KEY (`sys_id`),
KEY `Clients_head_of_family_id_01c17980_fk_Clients_sys_id` (`head_of_family_id`),
KEY `Clients_tenant_sys_id_id_52191b87_fk_Tenants_sys_id` (`tenant_sys_id_id`),
CONSTRAINT `Clients_head_of_family_id_01c17980_fk_Clients_sys_id` FOREIGN KEY (`head_of_family_id`) REFERENCES `clients` (`sys_id`),
CONSTRAINT `Clients_tenant_sys_id_id_52191b87_fk_Tenants_sys_id` FOREIGN KEY (`tenant_sys_id_id`) REFERENCES `tenants` (`sys_id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1
エントリを削除させない理由を教えてください。それを行う正しい方法は何ですか。
あなたは 'users'ではなく' clients'テーブルで問題があると言います –
ああ...ごめんなさい...更新された質問。 – User42
あなたが表示したモデルは 'foreign key'として' tenant_sys_id'を持っています。そして、あなたは 'parent_sys_id'が'外部キー 'であると言っています。だから 'モデル 'が増えているか、' tenant_sys_id'を誤って 'parent_sys_id'と書いたことがあります。上記のCozは本当に私に意味をなさないです。あなたが上に書いたことに間違いがなければ、良い例でシナリオを説明できますか? –