Проблема при создании ограничения внешнего ключа
Подробности выпуска
'Не удается создать таблицу
django
.clientauth_tblusers
(errno: 150 "Foreign key constraint is incorrectly formed")')
Что я делаю?
Я создал поле tinyint с автоматическим увеличением, но при ссылке на него в другой таблице возникает проблема.
Код в файле Model
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')),
],
),
Переопределить rel_db_type
, чтобы вернуть аналогичное db_type
без 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