python - Django 管理面板无法向表中添加任何记录

标签 python mysql sql django django-admin

在我的 Django 管理面板中,每当我想在表中添加一些记录时,我都会收到此错误:

IntegrityError at /admin/pool/orders/add/

(1452, 'Cannot add or update a child row: a foreign key constraint fails (projectname.orders, CONSTRAINT orders_ibfk_3 FOREIGN KEY (user_phone) REFERENCES users (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/

相关文章:

sql - MySQL 相当于 Oracle 中的 DECODE 函数

python - WTForms:在发布时将表单值传回给用户

Python:使用 Middle School Procedure 查找 GCD

python - 属性错误 : 'module' object has no attribute 'xfeatures2d' ?

python - pylab.X 和 pylab.plot.X

javascript - 我如何包含模型数组?

mysql - Group Key如何Json、Sum、动态?

php - 2个表的JOIN查询问题

mysql - 来自多个可能组的底部 N

SQL:替换为少量记录(mysql)