我在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中的租戶表中刪除一個條目,那麼它會拋出錯誤。
mysql> delete from tenants where sys_id = 1;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`sanstha_db`.`clients`, CONSTRAINT `Clients_tenant_sys_id_id_52191b87_fk_Tenants_sys_id` FOREIGN KEY (`tenant_sys_id_id`) REFERENCES `tenants` (`sys_id`))
這裏是表格結構。
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
請建議我爲什麼它不是讓我刪除的條目?什麼是正確的方式來做到這一點。
它說,你有'客戶'表的問題,而不是'用戶' –
哦......對不起......更新的問題。 – User42
您顯示的模型具有'tenant_sys_id'作爲'外鍵'。你在說'parent_sys_id'是一個'外鍵'。那麼還有更多'Models'還是錯誤地將'tenant_sys_id'寫爲'parent_sys_id'。因爲上述對我沒有任何意義。如果您上面寫的內容沒有錯誤,您能否以更好的例子來解釋這個情景? –