前提・実現したいこと
環境
djnago == 2.1.1
python == 2.8.0
実現したいこと
PersonモデルとJobOfferモデルをM2Mで関連づけていましたが、新たにthroughを追加して、JobHuntStepモデルを作りたいです。
つくったもののMigrateするとエラーがでます。
どなたかご教授していただけると助かります。
Django
1class Person(models.Model): 2 user = CharField('ユーザー名', max_length=120, null=True) 3 last_name = CharField('姓', max_length=60) 4 first_name = CharField('名', max_length=60) 5 created_at = models.DateTimeField(_('登録日'), default=timezone.now) 6 apply_job = models.ManyToManyField(JobOffer,through="JobHuntStep", verbose_name=_('応募する求人'), blank=True) 7 def __str__(self): 8 return self.user 9 10class JobOffer(models.Model): 11 recruetment_num = CharField('採用人数',null=True,max_length=60) 12 select_method_detail = models.TextField('選考方法詳細',null=True) 13 created_at = DateTimeField(auto_now_add=True) 14 def __str__(self): 15 return self.job 16 17class JobHuntStep(models.Model): 18 STATUS =(('s1',_('済')),('s2',_('未済'))) 19 person = models.ForeignKey(Person,on_delete=models.CASCADE,verbose_name=_('就労希望者')) 20 job_offer = models.ForeignKey(JobOffer,on_delete=models.CASCADE,verbose_name=_('希望就職先')) 21 created_at = DateTimeField('登録日',auto_now_add=True) 22 step_name = CharField(_('ステップタイトル'), max_length=160) 23 step_num = models.IntegerField(_('ステップ番号')) 24 step_explain = models.TextField(_('このステップの説明')) 25 step_done = CharField(_('状態'),choices=STATUS,max_length=30,default='s2') 26 27 def __str__(self): 28 title = self.step_num + str(':') +self.step_name 29 return title
Migrateすると以下のエラーがでます
エラーメッセージ File "C:\Users\user\virt\lib\site-packages\django\db\backends\base\schema.py", line 516, in alter_field raise ValueError( ValueError: Cannot alter field myapp.Person.apply_job into myapp.Person.apply_job - they are not compatible types (you cannot alter to or from M2M fields, or add or remove through= on M2M fields)
マイグレーションファイル
django
1# Generated by Django 2.1.1 on 2019-12-18 07:02 2 3from django.db import migrations, models 4import django.db.models.deletion 5 6 7class Migration(migrations.Migration): 8 9 dependencies = [ 10 ('myapp', '0020_person_apply_job'), 11 ] 12 13 operations = [ 14 migrations.CreateModel( 15 name='JobHuntStep', 16 fields=[ 17 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 18 ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='登録日')), 19 ('step_name', models.CharField(max_length=160, verbose_name='ステップタイトル')), 20 ('step_num', models.IntegerField(verbose_name='ステップ番号')), 21 ('step_explain', models.TextField(verbose_name='このステップの説明')), 22 ('step_done', models.CharField(choices=[('s1', '済'), ('s2', '未済')], default='s2', max_length=30, verbose_name='状態')), 23 ('job_offer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='myapp.JobOffer', verbose_name='希望就職先')), 24 ], 25 ), 26 migrations.AlterField( 27 model_name='person', 28 name='apply_job', 29 field=models.ManyToManyField(blank=True, through='myapp.JobHuntStep', to='myapp.JobOffer', verbose_name='応募する求人'), 30 ), 31 migrations.AddField( 32 model_name='jobhuntstep', 33 name='person', 34 field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='myapp.Person', verbose_name='就労希望者'), 35 ), 36 ] 37
試したこと
ここを参考に解決できそうでしたが、英語に上手く対応できず手も足もでませんでした。
https://stackoverflow.com/questions/26348260/alter-model-to-add-through-relationship-to-order-a-manytomany-field-django-1
ご教授のほどお願いいたします。
あなたの回答
tips
プレビュー