2016-06-23 5 views
1

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がエラーを発生させる:

+0

が必要ですあなたのモデルと移行は見えますか? – ohrstrom

答えて

2

あなたは一つの可能​​な選択肢を持っている "外部キー制約が間違って形成されています。" forigenKeyをint(10)で作成します。空の移行ファイルを編集します。

まず

python manage.py makemigrations --empty myapp 

で空の移行ファイルを作成して次にforigenKey int型でrawsql excuteするoperations = []を編集します(10) 新しい移行ファイル:

class Migration(migrations.Migration): 

    dependencies = [ 
     ('myapp', '0009_auto_20160623_xxxxx'), 
    ] 

    operations = [ 
     migrations.RunSQL("ALTER TABLE myapp_table MODIFY field_id int(10);") 
    ] 

RunSQLがどのようsqlparse

+0

私はALTER TABLEを実行できません。スクリプトはフィールドの作成時にエラーを発生させますが、フィールドをRunSQLに追加して手で関係を作ることができます。私は試してみる。 – Zartch

関連する問題