Django изменяет модель, переносит и обновляет существующие записи

#django #django-models #django-migrations

Вопрос:

У меня была модель Django, определенная как:

 from users.models import User

class Record(models.Model):
  user = models.ForeignKey(
            User,
            on_delete=SET_NULL,
            null=True)
  ...
 

Я понял, что было бы лучше переписать приведенную выше модель как:

 from userprofile.models import UserProfile

class Record(models.Model):
  user = models.ForeignKey(
            UserProfile,
            on_delete=SET_NULL,
            null=True)
  ....
 

Как я могу перенести (чтобы использовать новое определение модели Record ), не теряя старые Record экземпляры в базах данных? Каков общий процесс таких миграций? Потому что , если я мигрирую с новым определением Record , я потеряю доступ к старым Record объектам, поэтому я не смогу их обновить. Однако, если я не мигрирую, Django не позволит мне использовать UserProfile его в качестве user поля.

Ответ №1:

Таким образом, переносить нечего, так как user это атрибут Python, и нет столбца резервной базы данных, поскольку он не определен как внешний ключ.

В этом случае Django обработает это автоматически, так как обнаружит изменение имени модели и изменит имя таблицы на стороне БД, а затем обновит таблицу ссылок для таблицы записей.

вы можете запустить python manage.py makemigrations и просмотреть созданные миграции.

Комментарии:

1. Извините, я слишком упростил свой вопрос. Это действительно внешний ключ. Я обновил вопрос.