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
Вернуться на верх