【发布时间】:2016-09-27 12:38:28
【问题描述】:
我在 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
请告诉我为什么它不让我删除条目?正确的做法是什么。
【问题讨论】:
-
它说你对
clients表有问题,而不是users -
哦...对不起...更新问题。
-
您显示的模型具有
tenant_sys_id作为foreign key。你是说parent_sys_id是foreign key。那么还有更多Models还是您错误地将tenant_sys_id写为parent_sys_id。因为上面对我来说真的没有意义。如果你上面写的没有错误,你能用一个更好的例子来解释这个场景吗? -
@AnkushRaghuvanshi - 更新了问题......有一个错误......之前我使用了另一个模型。
-
您是在
views中进行 原始 sql 查询,还是使用 mysql 命令行在另一个终端中进行该查询。因为如果是前一种情况,那么我知道问题所在。