10桁のintインデックスを持つ従来のデータベースを持っています。私はint型(11)を設定するデフォルトジャンゴForigenkeyでは(11)Djangoは10桁に設定されたintインデックスを持つ外部キーを移行しません。
をint型ではない(10)intに私のforigenキーを作成するために、Djangoの移行を必要とMySQLでForigenKeysがエラーを与える作るしようとすると:
django.db.utils.OperationalError: (1005, 'Can\'t create table `test_table`.`#sql-169_1ec` (errno: 150 "Foreign key constraint is incorrectly formed")')
私はモデルでは、それはへの移行を変換 "[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)]),
),
最後stamentがエラーを発生させる:
が必要ですあなたのモデルと移行は見えますか? – ohrstrom