Django ID внешнего ключа не существует после миграции
Я новичок в Django, и я пытаюсь создать модель "игры" с двумя атрибутами:
- Поле "многие-к-одному", где несколько экземпляров игровой модели связаны с экземпляром пользовательской модели пользователя.
- Поле "многие ко многим", где экземпляры игровой модели связаны с несколькими экземплярами слов, а экземпляры модели слов связаны с несколькими экземплярами игровой модели .
Игровая модель:
class SortingGame(models.Model):
user_current_player = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=True, blank=True)
field_words = models.ManyToManyField(Word, related_name="field_sorting_games")
Модель слова:
class Word(models.Model):
str_word = models.CharField(max_length=50,null=True)
int_grade_level = models.IntegerField()
arrint_phonemes = ArrayField(models.CharField(max_length=50),null=True)
arrstr_graphemes = ArrayField(models.CharField(max_length=50),null=True)
int_num_syllables = models.IntegerField()
arrstr_syllables = ArrayField(models.CharField(max_length=50),null=True)
Модель пользователя:
class CustomUser(AbstractBaseUser):
# must have the following fields for django
email = models.EmailField(verbose_name="email",max_length = 100,unique=True)
username = models.CharField(max_length = 30, unique = True)
date_joined = models.DateTimeField(verbose_name = "date_joined",auto_now_add=True)
last_login = models.DateTimeField(verbose_name = "last_login",auto_now = True)
is_admin = models.BooleanField(default=False)
is_superuser = models.BooleanField(default = False)
is_staff = models.BooleanField(default = False)
is_active = models.BooleanField(default = True)
first_name = models.CharField(max_length=15, blank=True)
last_name = models.CharField(max_length=30, blank=True)
spelling_level = models.IntegerField(default=1, unique=False)
time_played = models.IntegerField(default=0, unique=False)
percent_correct = models.IntegerField(default=0, unique=False)
Когда я запускаю python3 manage.py makemigrations и python3 manage.py migrate, он не жалуется, но когда я перехожу на страницу администратора моего сайта django, там написано psycopg2.errors.UndefinedColumn: column "user_current_player_id" of relation "game_sortinggame" does not exist.
Это заставляет меня думать, что проблема связана с user_current_player в SortingGame (он работал нормально до того, как я добавил этот атрибут), но я искал на разных форумах, чтобы увидеть, что может идти не так, и я не могу понять это. Я попробовал начать с нуля с новой базой данных, но она все равно выдает то же самое исключение. Любые идеи будут приняты с благодарностью!
Натан! Прежде всего, убедитесь, что у вас есть приложение, в котором создана модель CustomUser, в файле settings.py, в INSTALLED_APPS. Если это так, пожалуйста, посмотрите на эту папку (приложение), где у вас определен CustomUser, чтобы проверить, действительно ли там есть папка migrations.
Я подозреваю, что Django не знает об этом приложении (нет в разделе INSTALLED_APPS) и поэтому не мигрировал его. Таким образом, ваша база данных не находит соединение User Model.
С учетом сказанного, я бы предложил вам сохранить модель учетной записи, определенную Django User, и создать другую модель с прямой связью с ней для работы с полями профиля/игры, такими как уровень орфографии, процент_корректности и т.д.
Это позволит вам в дальнейшем лучше организовать "заботы" модели.
если вы уже делали миграции, попробуйте использовать (python manage.py makemigrations -appname)
После этого вам нужно добавить модуль в файл admin.py
from django.contrib import admin
from .models import *
admin.site.register(SortingGame)
... all other modules