#mysql #django #django-models
#mysql #django #django-модели
Вопрос:
Итак, у меня есть хорошо работающее приложение Django 3 с пользовательской моделью пользователя, работающей в базе данных MySQL. Я месяцами выполнял makemigrations и успешно выполнял миграцию. Сегодня я попытался добавить поле в свою пользовательскую модель пользователя под названием Account . Как только я добавляю поле в эту модель, сервер разработки пытается обработать изменение и вылетает с этой ошибкой:
django.db.utils.OperationalError: (1054, «Неизвестный столбец’account_account.lifetimeuser’ в ‘списке полей'»)
Не имеет значения тип поля или имя.
Базовым исключением является: MySQLdb._exceptions.OperationalError: (1054, «Неизвестный столбец’account_account.lifetimeuser’ в ‘списке полей'»)
Поймите, что это ПРОИСХОДИТ НЕ во время выполнения. Это сразу после того, как я меняю модель и перестаю печатать. Или в этом случае раскомментируйте поле lifetimeuser (кстати, это только для тестирования. Я знаю, что у меня есть is_lifetime_user . Это реальное поле, которое было добавлено некоторое время назад.
Также обратите внимание, что это КАСАЕТСЯ ТОЛЬКО модели учетной записи. Любая другая модель в файле работает должным образом. Добавление, удаление, редактирование: нет проблем, если синтаксис правильный.
Поскольку ошибка возникает немедленно, я не могу совершать миграции или мигрировать. Я знаю, что моя БД синхронизирована везде.
Кто-нибудь может дать мне подсказку относительно того, что здесь происходит? Есть ли какие-то настройки БД, которые мне не хватает? Спасибо!
Вот модель на случай, если это поможет.
class Account(AbstractBaseUser):
id = models.UUIDField(primary_key=True, default=None, editable=False)
email = models.EmailField(verbose_name="email", max_length=60, unique=True)
username = models.CharField(max_length=30, unique=True, db_index=True)
date_joined = models.DateTimeField(verbose_name="date joined", auto_now_add=True)
last_login = models.DateTimeField(verbose_name="last login", auto_now=True)
access_level = models.IntegerField(default=1)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_freeuser = models.BooleanField(default=False)
is_10kuser = models.BooleanField(default=False)
is_100kuser = models.BooleanField(default=False)
is_lifetimeuser = models.BooleanField(default=False)
#lifetimeuser = models.BooleanField(default=False)
force_pw_change = models.BooleanField(default=False)
first_name = models.CharField(max_length=40)
last_name = models.CharField(max_length=60)
profile = models.OneToOneField(UserProfile, on_delete=models.CASCADE, null=True, blank=True, db_index=True)
class Meta:
ordering = ['-date_joined']
# this is the field the user will use to login
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username', 'first_name', 'last_name']
# tell the account what AcctManager to use
objects = MyAccountManager()
Пара обновлений:
Я просмотрел настройки и прокомментировал каждую строку промежуточного программного обеспечения, чтобы посмотреть, что произойдет, когда я раскомментирую тестовое поле в модели учетной записи. Никаких изменений.
Кроме того, я экспериментировал с моделями в том же model.py файл, и тестовый сервер замечает изменение и сообщает о перезагрузке, и перезагружается успешно. Сбой происходит только для модели учетной записи. Модель учетной записи также говорит о перезагрузке, но завершается с ошибкой. Очень странно.
Комментарии:
1. #lifetimeuser = модели. BooleanField(по умолчанию = False) поле закомментировано
2. Я знаю. Как я уже говорил выше, в ту минуту, когда я его раскомментирую, возникает ошибка. Вот в чем вопрос… Почему?
3. попробуйте закомментировать AUTH_USER_MODEL в вашем settings.py , выполните миграцию, а затем раскомментируйте ее обратно
4. Спасибо за попытку помочь … Закомментируйте AUTH_USER_MODEL и test: то же поведение. В ту секунду, когда я раскомментирую поле, возникает ошибка.