Предыстория: я начал проект с пользовательской моделью User. Однако, нуб, я не знал о классе AbstractBaseUser. Так что я просто написал свое. Приложение развернуто и работает нормально. Но теперь я хочу переключиться на использование AbstractBaseUser, чтобы воспользоваться преимуществами некоторых встроенных утилит Django (например, предварительно созданного процесса сброса пароля). Я сделал это с другим приложением, и все работало нормально. Но этого не было, пока я вносил изменения. Поскольку это так, мне нужно было сохранить старую таблицу пользователей, пока я вносил изменения с ее копией. Итак, моим первым шагом было добавление db_table = test_users
к моей старой пользовательской модели, чтобы приложение prod работало с неизменной таблицей. Я запустил миграцию, и произошли две неожиданные вещи (я новичок, и поэтому они были неожиданными):
- Старая таблица пользователей была переименована. Я думал, будет создана новая таблица. Нет проблем, я быстро скопировал новую таблицу и назвал копию именем старой таблицы, чтобы приложение prod могло найти своих пользователей
- Был добавлен столбец last_login. Зачем?? Вот моя модель с добавленными
db_table
class User(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
email = models.CharField(max_length=255)
password = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
client_id = models.IntegerField(blank=True, null=True)
is_admin = models.BooleanField(default=False)
is_super = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
class Meta:
db_table = "test_users"
. Большая проблема в том, что когда я перехожу на AbstractBaseUser
и запускаю миграцию, я получаю сообщение об ошибке. Глядя на файл миграции, я вижу, что это изменение создает миграцию, и все, что он пытается сделать, - это добавить last_login
в таблицу. Поэтому, конечно, я получаю сообщение об ошибке «Повторяющееся имя столбца 'last_login'»
Итак, у меня двоякий вопрос:
- Почему этот столбец был добавлен в первый миграция?
- Если я просто запустил
migrate --fake
и продолжу, будут ли это иметь непредвиденные последствия? Я подумал, что это может быть хорошим решением, учитывая, что файл миграции показывает, что больше ничего не делается, и если поле уже существует, то никакого вреда не будет?