【发布时间】:2016-06-25 18:51:57
【问题描述】:
我有一个旧数据库,其 int 索引设置为 10 位。我需要 Django 迁移来创建 int(10) 而不是 int(11) 的外来键
默认情况下,Django Forigenkey 设置为 int(11),当尝试在 Mysql 中设置 ForigenKeys 时会报错:
django.db.utils.OperationalError: (1005, 'Can\'t create table `test_table`.`#sql-169_1ec` (errno: 150 "Foreign key constraint is incorrectly formed")')
我尝试在模型中使用“validators=[MaxValueValidator(9999999999)]”,它将迁移转换为:
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='clients.Customer', validators=[django.core.validators.MaxValueValidator(9999999999)]),
但是当 django 迁移创建它使用 int(11) 创建的整数字段时
知道如何修改 int 的长度吗?
我的模特:
class Customer(models.Model):
... (BUNCH OF FIELDS HERE)....
django_user = models.ManyToManyField(User, through= 'CustomerUser')
class Meta:
db_table = 'customers'
class CustomerUser(models.Model):
ROL_USUARIO = (
('T', 'Tecnico'),
('G', 'Gerente'),
('E', 'Emplead'),
)
cliente = models.ForeignKey(Customer, null= True, validators=[MaxValueValidator(9999999999)])
usuario = models.ForeignKey(User, null= True)
rol = models.CharField(choices=ROL_USUARIO, max_length = 1, null= True, default='')
迁移:
migrations.CreateModel(
name='CustomerUser',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('rol', models.CharField(choices=[('T', 'Tecnico'), ('G', 'Gerente'), ('E', 'Emplead')], default='', max_length=1, null=True)),
**intentionally skipped**
#('cliente', models.ForeignKey(null=True,on_delete=django.db.models.deletion.DO_NOTHING, to='clients.Customer')),
#('usuario', models.ForeignKey(null=True,on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL)),
],
),
migrations.AddField(
model_name='customeruser',
name='cliente',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='clients.Customer', validators=[django.core.validators.MaxValueValidator(9999999999)]),
),
最后一个语句引发错误:“外键约束格式不正确”
【问题讨论】:
-
您的模型和迁移看起来如何?