3

问题详情

'无法创建表djangoclientauth_tblusers(errno: 150 "外键约束格式不正确")')

我在做什么?

我在下面创建了一个 tinyint 自动增量字段,但是在另一个表中引用它时会导致问题。

模型文件中的代码

class TinyIntField(AutoField):
    def db_type(self, connection):
        return "tinyint(3) AUTO_INCREMENT"

class tblroles(models.Model):
    role_id = TinyIntField(primary_key=True, verbose_name = "role_id")
    name = CharField(max_length = 20)

class tblusers(models.Model):
    user_id = BigAutoField(primary_key=True)
    role = ForeignKey(tblroles, on_delete = models.CASCADE)
    

迁移文件中的代码

migrations.CreateModel(
    name='tblroles',
    fields=[
        ('role_id', clientauth.models.TinyIntField(primary_key=True, serialize=False, verbose_name='role_id')),
        ('name', models.CharField(max_length=20))
    ],
),
migrations.CreateModel(
    name='tblusers',
    fields=[
        ('user_id', models.BigAutoField(primary_key=True, serialize=False)),
        ('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='clientauth.tblroles')),
    ],
),

赏金问题

on_delete=django.db.models.deletion.CASCADE, to='clientauth.tblroles'

上面代码中的这一行没有设置级联删除数据库端。我检查了文档,但找不到设置级联删除的文档。你能推荐一个吗?

4

1 回答 1

6

覆盖rel_db_type以返回类似于db_typewithout AUTO_INCREMENT

class TinyIntField(AutoField):
    def db_type(self, connection):
        return "tinyint(3) AUTO_INCREMENT"

    def rel_db_type(self, connection):
        return "tinyint(3)"

参考:https ://docs.djangoproject.com/en/3.2/howto/custom-model-fields/#custom-database-types

于 2021-10-07T16:37:13.847 回答