質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

Q&A

0回答

711閲覧

Django モデルのM2Mフィールドにthroughを追加したい。

e.senaha

総合スコア20

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

0グッド

0クリップ

投稿2019/12/18 08:15

編集2019/12/18 08:18

前提・実現したいこと

環境
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

ご教授のほどお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問