python - Django 管理面板无法向表中添加任何记录
问题描述
在我的 Django 管理面板中,每当我想在表中添加一些记录时,我都会收到此错误:
/admin/pool/orders/add/ 处的 IntegrityError
(1452,'无法添加或更新子行:外键约束失败(
projectname
.orders
, CONSTRAINTorders_ibfk_3
FOREIGN KEY (user_phone
) REFERENCESusers
(phone
) ON DELETE NO ACTION ON UPDATE NO ACTION)')
这是我的模型:
class Orders(models.Model):
objects = jmodels.jManager()
product = models.ForeignKey('Products', models.DO_NOTHING)
user_phone = models.ForeignKey('Users', models.DO_NOTHING, db_column='user_phone')
order_date = jmodels.jDateField()
status = models.CharField(max_length=11)
price = models.CharField(max_length=11)
count = models.IntegerField()
class Meta:
managed = False
db_table = 'Orders'
verbose_name_plural = "user orders"
def __str__(self):
return '%s------- (%s)' % (self.user_phone,self.status)
class Users(models.Model):
objects = jmodels.jManager()
phone = models.CharField(unique=True, max_length=11)
name = models.CharField(max_length=80)
family = models.CharField(max_length=80)
nationalcode = models.CharField(max_length=11, blank=True, null=True)
city = models.CharField(max_length=80, blank=True, null=True)
address = models.TextField(blank=True, null=True)
profilepic = models.TextField(blank=True, null=True)
profiletext = models.TextField(blank=True, null=True)
bons = models.CharField(max_length=11, blank=True, null=True)
charge = models.CharField(max_length=11, blank=True, null=True)
registerdate = jmodels.jDateField()
status = models.CharField(max_length=11, blank=True, null=True)
class Meta:
managed = False
db_table = 'Users'
verbose_name_plural = "Users"
def __str__(self):
return '%s %s ---- (%s)' % (self.name,self.family,self.phone)
附加: 除此之外,我还有另一个问题。这是我在订单表中有 150 条记录,但我在 Django 管理面板中看不到它们,而是只显示计数。
解决方案
您的错误可能是由于 STORAGE_ENGIENE 不匹配造成的。我认为有一些 INNODB 表和一些 MyISAM 表。尝试将它们转换为一致的类型。
此外,如果这不是错误,那么它是由于数据库中的前向引用引起的。如果这是原因,那么您可以通过编辑 Django 设置来关闭外键检查:
DATABASES = {
'default': {
...
'OPTIONS': {
"init_command": "SET foreign_key_checks = 0;",
},
}
}
有关更多详细信息,您可以参考这篇文章:Django“无法添加或更新子行:外键约束失败”
编辑:
要phone
在您的user_phone
领域中获得价值,您需要ForeignKey.to_field
在您的Orders
模型中使用:
user_phone = models.ForeignKey('Users', to_field='phone')
这是必需的,因为 Django 使用模型的主键User
将值存储在user_phone
模型中Orders
。使用上述脚本有助于在外键字段中获取所需字段的值。
这样做时,您需要确保phone
已unique=True
设置 User 模型的字段。
检查此链接以获取官方 Django 文档to_field
推荐阅读
- assembly - Arm 装配中的嵌套循环
- flutter - 在 Flutter 应用中创建甘特图
- jenkins - 从 Jenkins 运行 ssh 时出现以下错误:Permission denied (publickey,password,keyboard-interactive)
- php - 环绕字符串的简单循环不起作用?
- c++ - 为什么 std::shared_ptr::use_count() 使用 Relaxed_memory_order 而不是完整的内存屏障?
- github - 如何基于两周前的提交哈希创建发布
- firebase - 如何使用 React Native 移动应用程序在 Firebase 实时数据库中保存和检索图像?
- snowflake-cloud-data-platform - 雪花暂存错误“原因:无法将文件上传到 s3”
- sql-server - 在 Powershell 中,如何构建表对象数组而不是表名数组?
- html - 正则表达式用条件高亮html代码