提交行时出现Django外键约束错误

我刚刚创建了一个Django项目,并直接在mysql中添加了2个:

1)金融控股(tbl_holdings)

2)服务提供商(tbl_holdings_service_providers)

它们在My 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,KEY `INDEX` (`provider_name`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1

我在Django models.py中创建了相关模型

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)

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

在尝试添加馆藏时,出现以下错误:与外键约束有关

  / p / admin / app_fin / tblholdings / add /中的

IntegrityError(1452,'无法添加   或更新子行:外键约束失败   ({_financetbl_holdings,约束fk_service_provider   外键(service_provider)参考   tbl_holdings_service_providersprovider_name)不删除任何操作   ON UPDATE)')请求方法:POST请求   网址:admin / app_fin / tblholdings / add / Django   版本:2.2.7异常类型:IntegrityError异常值:(1452,   '无法添加或更新子行:外键约束失败   ({_financetbl_holdings,约束fk_service_provider   外键(service_provider)参考   tbl_holdings_service_providersprovider_name)不删除任何操作   ON UPDATE)')异常   位置:/root//venv/lib/python3.6/site-packages/MySQLdb/connections.py   在查询中,第231行Python   可执行文件:/ root // venv / bin / python Python版本:3.6.8   Python路径:['/ 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

有人能指出我做错了什么吗?

XHLIZIMING 回答:提交行时出现Django外键约束错误

看起来您正在使用的外键不是主键。您可以尝试一下

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
本文链接:https://www.f2er.com/3118273.html

大家都在问