[英]Django Foreign key constraint error on submitting a row
我刚刚创建了一个Django项目并在mysql中直接添加了2个:
1)金融控股(tbl_holdings)
2) 服务提供商 (tbl_holdings_service_providers)
他们在我的 Sql 中的两个数据定义是:
tbl_holdings
CREATE TABLE `tbl_holdings` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`item_code` varchar(5) NOT NULL,
`product_name` varchar(45) NOT NULL,
`service_provider` varchar(100) NOT NULL,
`account_details` varchar(100) NOT NULL,
`purchase_cost` int(15) NOT NULL,
`current_value` int(15) NOT NULL,
`purchase_date` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `item_code_UNIQUE` (`item_code`),
KEY `fk_service_provider_name_idx` (`service_provider`),
CONSTRAINT `fk_service_provider` FOREIGN KEY (`service_provider`) REFERENCES `tbl_holdings_service_providers` (`provider_name`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
tbl_holdings_service_providers
CREATE TABLE `tbl_holdings_service_providers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`provider_name` varchar(100) NOT NULL,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `INDEX` (`provider_name`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1
我在 Django models.py 中创建了相关的 model
class TblHoldings(models.Model):
item_code = models.CharField(unique=True, max_length=5)
product_name = models.CharField(max_length=45)
service_provider = models.ForeignKey('TblHoldingsServiceProviders', models.DO_NOTHING, related_name='service_provider',db_column='service_provider')
account_details = models.CharField(max_length=100)
purchase_cost = models.IntegerField()
current_value = models.IntegerField()
purchase_date = models.DateTimeField(blank=True, null=True)
updated_at = models.DateTimeField(blank=True, null=True)
created_at = models.DateTimeField(blank=True, null=True)
class Meta:
verbose_name = 'Holding'
verbose_name_plural = 'Holdings'
managed = False
db_table = 'tbl_holdings'
class TblHoldingsServiceProviders(models.Model):
provider_name = models.CharField(max_length=100)
updated_at = models.DateTimeField(blank=True, null=True)
created_at = models.DateTimeField(blank=True, null=True)
class Meta:
verbose_name = "Lookup For Service Provider"
verbose_name_plural = 'Lookup For Service Providers'
managed = False
db_table = 'tbl_holdings_service_providers'
admin.py 中的代码是
@admin.register(TblHoldings)
class HoldingsAdmin(admin.ModelAdmin):
list_display = ('item_code', 'product_name', 'service_provider', 'current_value', 'created_at')
ordering = ('purchase_date',)
search_fields = ('product_name',)
@admin.register(TblHoldingsServiceProviders)
class HoldingsServiceProviderAdmin(admin.ModelAdmin):
list_display = ('id', 'provider_name', 'created_at')
ordering = ('created_at',)
search_fields = ('provider_name',)
在尝试添加控股时,我收到以下错误:与外键约束有关
IntegrityError at /admin/app_fin/tblholdings/add/ (1452, '无法添加或更新子行:外键约束失败 (
_finance
, CONSTRAINTtbl_holdings
FOREIGN KEY (service_provider
)tbl_holdings_service_providers
fk_service_provider
provider_name
) ON DELETE NO ACTION ON UPDATE )') 请求方法:POST 请求 URL:admin/app_fin/tblholdings/add/ Django 版本:2.2.7 异常类型:IntegrityError 异常值:(1452,'不能添加或更新外键约束失败:_finance
.tbl_holdings
, CONSTRAINTfk_service_provider
FOREIGN KEY (service_provider
) REFERENCEStbl_holdings_service_providers
(provider_name
) ON DELETE NO ACTION ON UPDATE )') 异常位置:/root//venv/lib/python3.6/site-packages/MySQLdb/connections.py in查询,第 231 行 Python 可执行文件:/root//venv/bin/python Python 版本:3.6.8 ZA7F5F35426B9274 11FC9231B56382173Z 路径:['/root//project_','/root//venv/lib/python36.zip','/root//venv/libremoved/python3.6','/root//venv/lib/python3 .6/lib-dynload', '/usr/lib/python3.6', '/root/_fin/venv/lib/python3.6/site-packages'] 服务器时间:2019 年 11 月 12 日星期二 09:51: 28 +0000
有人可以指出我做错了什么。
看起来您使用的外键不是主键。 你可以试试这个
CREATE TABLE `tbl_holdings` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`item_code` varchar(5) NOT NULL,
`product_name` varchar(45) NOT NULL,
`service_provider` varchar(100) NOT NULL,
`account_details` varchar(100) NOT NULL,
`purchase_cost` int(15) NOT NULL,
`current_value` int(15) NOT NULL,
`purchase_date` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `item_code_UNIQUE` (`item_code`),
KEY `fk_service_provider_name_idx` (`service_provider`),
CONSTRAINT `fk_service_provider` FOREIGN KEY (`service_provider`) REFERENCES `tbl_holdings_service_providers` (`provider_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.