Установлено неправильное значение по умолчанию в модели Django
Итак, я добавил новое поле времени в свою модель django. Когда я выполнял "python3 manage.py makemigrations", мне было предложено выбрать два варианта: установить значение по умолчанию сейчас или добавить что-то еще. Я решил установить его сейчас. Я не подумал и установил значение "", что является неправильным форматом для поля времени. Я перепробовал все, даже вручную в sqlite, удалив новое поле и многое другое, но я все равно получаю сообщение об ошибке при запуске "python3 manage.py migrate", в котором говорится следующее:
django.core.exceptions.ValidationError: ['“” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] format.']
Если кто-то сможет мне помочь, я буду очень признателен!
Чтобы отменить изменения, вы можете выполнить два различных действия:
Ручное изменение миграции, произведенной при выполнении этой команды
Вручную удалив этот файл переноса
Вероятно, вам также следует обновить интересующие вас таблицы базы данных, в зависимости от вашей ситуации.
Вы можете попробовать использовать эту команду -
python manage.py migrate <app_name> <previous_migration>
В поле previous_migration вставьте номер переноса, например, 0004, если0005 - это номер файла переноса, в котором вы установили значение по умолчанию.
Это отменит все изменения до тех пор, пока файлы миграции 0004 и изменения миграции 0004 не будут присутствовать в базах данных.
После этого вы можете изменить значение по умолчанию в моделях.
Для получения более подробной информации - https://docs.djangoproject.com/en/5.1/topics/migrations/#reversing-migrations
Вы проверяли каталог миграции?
- Когда вы вносите изменения в свою базу данных, эти изменения обычно отслеживаются в этом каталоге.
В этих файлах найдите раздел "Добавлено по умолчанию" или что-то похожее на
migrations.AlterField
здесь вы можете проверить, какое значение используется по умолчанию. Возможно, скрипт читает этот файл миграции, выдавая ошибку перед изменением на правильное значение по умолчанию. Я уже сталкивался с этой проблемой ранее, вы можете либо вручную изменить значения, либо удалить весь файл целиком и запустить его снова.
Источник: Ранее возникала такая проблема.
Вы можете попробовать удалить ошибочную миграцию вручную.
Сначала удалите перенос, который добавил поле с "". Перейдите в папку миграции вашего приложения (your_app/migrations/) и удалите последний файл миграции (не удаляйте _init_.py).
Сброс настроек в Django, запущенных на вашей консоли:
python3 manage.py makemigrations your_app
Если для поля времени требуется значение по умолчанию, используйте допустимый формат, например 00:00:00:
from django.db import models
class YourModel(models.Model):
your_time_field = models.TimeField(default="00:00:00") # Valid value
Или, если вы хотите, чтобы это было необязательно:
your_time_field = models.TimeField(null=True, blank=True)
Наконец, снова примените миграции:
python3 manage.py migrate your_app
Не забудьте изменить your_app на название вашего приложения
Вы можете выполнить откат к миграции непосредственно перед установкой неверного значения TimeField по умолчанию, используя:
python manage.py migrate <app_name> <previous_migration_number>
Чтобы найти номер переноса, выполните команду:
ls <app_name>/migrations/
Затем выберите последнюю миграцию перед неправильной и используйте:
python manage.py migrate <app_name> <that_migration>
После отката отредактируйте файл переноса (<app_name>/migrations/xxxx_auto_*.py) и корректно обновите поле TimeField по умолчанию (или удалите его, если оно не требуется).
После исправления запустите повторно:
python manage.py makemigrations <app_name>
python manage.py migrate <app_name>