Djangoで質問投稿サイトを作成しています。
環境は、データベースはPostgreSQLです。
投稿された質問にアクセスされた数をカウントするために、どのユーザーがどの質問にアクセスしたかを記録するために、QuestionAccessというモデルを追加しようとしました。
(下記のCustomUser、Questionは元々ありました。)
しかし、python makemigrationsはうまくいくのに、python migrateがうまくいきません。
作成しようとしたモデルは、下記のとおりです。
python
1# models.py 2# ユーザー 3class CustomUser(AbstractUser): 4 nickname = models.CharField(max_length=100, unique=False, verbose_name="ニックネーム") 5 def __str__(self): 6 return self.first_name 7 8# 質問 9class Question(models.Model): 10 title = models.CharField(max_length=100) 11 user = models.ForeignKey( 12 CustomUser, 13 on_delete=models.CASCADE, 14 blank=True, 15 null=True 16 ) 17 content = models.TextField() 18 def __str__(self): 19 return self.title 20 21# アクセス数 22class QuestionAccess(models.Model): 23 question = models.ForeignKey(Question, on_delete=models.CASCADE, verbose_name="質問") 24 custom_user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, verbose_name="アクセス者") 25 datetime = models.DateTimeField(auto_now=True, verbose_name="アクセス日時") 26 27 def __str__(self): 28 return self.question
しかし、python makemigrationsをした後、python migrateをしても、PostgreSQLには、questionaccessのテーブルができません(他のテーブルは全てできています)。
python makemigrationsをした後、下記の0001_initial.pyができているので、makemigrationsはうまくいっているのではないかと思います。
python
1# 0001_initial.py 2migrations.CreateModel( 3 name='QuestionAccess', 4 fields=[ 5 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 6 ('datetime', models.DateTimeField(auto_now=True, verbose_name='アクセス日時')), 7 ('custom_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='アクセス者')), 8 ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archi.Question', verbose_name='質問')), 9 ], 10 ),
makemigrationsがうまくいっているのに、migrateがうまくいかない理由として考えられるのは、なんでしょうか。
私が思いついたのは、
QuestionAccessがForeignKeyで参照しているのは、CustomUserとQuestionの各モデルですが、QuestionもCustomUserをForeignKeyで参照しているので、
ひょっとしたら、それが原因になっていたりするでしょうか。
もしそうであれば、どうしたらよいでしょうか。
全く、手掛かりがつかめないので、お分かりの方、ご教示頂ければ幸いです。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。