Ошибка миграции django при изменении поля FK на обычное поле
Часть моей модели изначально выглядела так.
class RealTimeLocation(models.Model):
name = models.CharField(max_length=80)
latlng = models.PointField(default=None)
class CabLog(models.Model):
location = models.ForeignKey(RealTimeLocation,
on_delete=models.CASCADE,
related_name='cablog_locations')
Потом я подумал, что поле FK не нужно, поэтому я изменил поле fk на поле Point.
class RealTimeLocation(models.Model):
name = models.CharField(max_length=80)
latlng = models.PointField(default=None)
class CabLog(models.Model):
location = models.PointField()//
'python manage.py makemigrations' проблем нет, но при миграции я получаю ошибку.
.django.db.utils.ProgrammingError: колонка "location_id" отношения "myapp_cablog" не существует.
Я пробовал добавлять опцию null=True в pointfield, удалять migrate-скрипты и делать все заново много раз, безрезультатно. Итак, прежде чем я полностью фальсифицирую весь проект и начну все сначала, есть ли у кого-нибудь какие-нибудь решения для этого. У меня уже есть некоторые данные в DB, так что я действительно не хочу этого делать. Спасибо.
Вы получили эту ошибку, потому что запустили только makemigrations
и migrate
.
Вы должны запустить sqlmigrate
также.
Попробуйте следующие три команды:
python manage.py makemigrations appname
python manage.py sqlmigrate appname 0001 #You didn't run this command after makemigrations that's why you got that error
python manage.py migrate
Примечание: 0001 это значение будет генерироваться после makemigrations. Оно может быть либо 0001, либо 0002 и т.д.