在我的 Django 管理面板中,每当我想在表中添加一些记录时,我都会收到此错误:
IntegrityError at /admin/pool/orders/add/
(1452, 'Cannot add or update a child row: a foreign key constraint fails (
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 "Cannot add or update a child row: a foreign key constraint fails"
编辑:
获取phone
的值在你的user_phone
字段,你需要使用 ForeignKey.to_field
在你的Orders
建模为:
user_phone = models.ForeignKey('Users', to_field='phone')
这是必需的,因为 Django 使用 User
的主键将值存储在 user_phone
中的模型的 Orders
模型。使用上述脚本有助于在外键字段中获取所需字段的值。
这样做时,您需要确保 phone
User 模型的字段有 unique=True
设置。
查看此链接以获取官方 Django 文档 to_field
关于python - Django 管理面板无法向表中添加任何记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55138678/