Миграция не создает столбец в базе данных
makemigrations
и migrate
работают нормально без ошибок. но когда я проверяю базу данных, она не создается
представляет собой модель:
class Services(models.Model):
service_id = models.AutoField(primary_key=True)
parent_id = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True,related_name='sub_service')
service_name = models.CharField(max_length=100)
service_icon = models.CharField(max_length=500, null=True, blank=True)
service_image = models.CharField(max_length=500, null=True, blank=True)
category_id = models.ForeignKey(Category,on_delete=models.CASCADE)
active_status = models.BooleanField(default=True)
type = models.SmallIntegerField(blank=True, null=True)
service_description = models.TextField( null=True, blank=True)
duration = models.CharField(max_length=100,null=True,blank=True)
Я добавил поле duration позже и оно не дает мне никакой ошибки при запуске api
django.db.utils.ProgrammingError: column service_list_services.duration does not exist
LINE 1: ...", "service_list_services"."service_description", "service_l...
i have tried deleting migration files and then migrating but still.. its not giving error while migrating but doesnot create row.
tried this
python manage.py migrate --fake
still same
Исходя из вашей ситуации (удаление + воссоздание всех миграций может вызвать другие проблемы, такие как круговые зависимости, в зависимости от того, как построены модели), я вижу два сценария:
- Сценарий разработки (можно отказаться от таблиц db)
Перезапуск с чистой персистенцией: сбросьте таблицы БД, удалите файлы миграций, снова выполните команды makemigrations
и migrate
и зафиксируйте новый файл миграций
- Производственный сценарий (нельзя потерять данные)
Восстановите удаленный файл миграции, исправьте несоответствия в БД или в файле вручную, если вы изменили что-то по ошибке, когда код и БД синхронизированы, сделайте изменения снова и убедитесь, что используете миграции каждый раз, когда вам нужно изменить персистентность.
, используя команды makemigrations
и migrate
.
Если код и БД синхронизированы, можно использовать команду squashmigrations
В общем случае: Избегайте удаления предыдущего файла миграции, так как это может вызвать проблемы с зависимостями при других миграциях. Из Django doc:
Вам предлагается свободно выполнять миграции и не беспокоиться о том, сколько их у вас будет; код миграции оптимизирован для работы с сотнями людей. их количество; код миграции оптимизирован для работы с сотнями за раз без значительного замедления. Однако, в конце концов, вы захотите перейти от нескольких сотен миграций к нескольким, и вот тут-то и приходит на помощь сминание.