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

Python 提交行时出现Django外键约束错误,python,mysql,django,django-models,Python,Mysql,Django,Django Models,我刚刚创建了一个Django项目,并在mysql中直接添加了2: 1) 金融控股公司(tbl_控股公司) 2) 服务提供商(tbl_控股公司_服务提供商) 它们在My Sql中的两个数据定义都是: tbl_控股公司 tbl_控股公司服务提供商 我在Django models.py中创建了相关模型 class TblHoldings(models.Model): item_code = models.CharField(unique=True, max_length=5) prod

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

1) 金融控股公司(tbl_控股公司)

2) 服务提供商(tbl_控股公司_服务提供商)

它们在My Sql中的两个数据定义都是:

tbl_控股公司

tbl_控股公司服务提供商

我在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)
    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',)
在尝试添加保留时,我得到以下错误:与外键约束有关

完整性错误位于/admin/app_fin/tblholdings/add/(1452),“无法添加” 或更新子行:外键约束失败 (
\u财务
tbl\u控股
,约束
fk\u服务提供商
外键(
服务提供商
)引用
tbl\u holdings\u service\u providers
provider\u name
)关于删除无操作 更新时)请求方法:POST请求 URL:admin/app_fin/tblholdings/add/Django 版本:2.2.7异常类型:IntegrityError异常值:(1452, '无法添加或更新子行:外键约束失败 (
\u财务
tbl\u控股
,约束
fk\u服务提供商
外键(
服务提供商
)引用
tbl\u holdings\u service\u providers
provider\u name
)关于删除无操作 更新时)异常 位置:/root//venv/lib/python3.6/site-packages/MySQLdb/connections.py 在查询中,第231行是Python 可执行文件:/root//venv/bin/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']Server 时间: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
@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',)
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