Миграции Django-моделей: ошибка - попытка добавить необнуляемое поле - PullRequest
0 голосов
/ 27 апреля 2019

Когда я выполняю миграцию на мои модели, терминал выдает предупреждение: «Вы пытаетесь добавить необнуляемое поле и т. Д.» И запрашивает 2 варианта. Я должен был выполнить миграцию 7 раз - я должен удалить «0001_initial.py», «0002_auto file», а также db.sqlite3? Мне не нужно хранить информацию о базе данных, которую я ввел, так как я только проводил тесты, чтобы увидеть, работают ли модели - я просто хочу убедиться, что я не удаляю саму базу данных, чтобы я мог дополнительно протестировать свои модели, чтобы увидеть если они работают. Может кто-нибудь проверить, какие файлы мне нужно удалить, чтобы я мог выполнить миграцию? Ваша помощь будет высоко ценится!

Пока мои папки миграции выглядят так: 001_initial.py, файл 0002_auto, файл 0003_auto, файл 0004_auto_file, файл 0005_auto_file, файл 0006_auto и, наконец, файл 007_order_buyers ---- последний файл касается меня - я думаю, что это bc, я должен Я выбрал вариант 2. Я просто хочу иметь возможность мигрировать, и я опасаюсь, что мои модели не будут работать, если я удалю важные файлы.

models.py

class User(models.Model):
    first_name=models.CharField(max_length=100)
    last_name=models.CharField(max_length=100)
    email=models.CharField(max_length=100)
    password=models.CharField(max_length=100)
    created_at=models.DateTimeField(auto_now_add=True)
    updated_at=models.DateTimeField(auto_now=True)

class Order(models.Model):
    full_name=models.CharField(max_length=100)
    cc_number=models.PositiveIntegerField()
    exp_date=models.PositiveIntegerField()
    cvc=models.PositiveIntegerField()
    buyer=models.ForeignKey(User, related_name="bought_tickets", on_delete=models.PROTECT)
    created_at=models.DateTimeField(auto_now_add=True)
    updated_at=models.DateTimeField(auto_now=True)

class Ticket(models.Model):
    venue=models.CharField(max_length=100)
    quantity=models.PositiveIntegerField()
    price=models.DecimalField(default=25.00, max_digits=5, decimal_places=2, null=True, blank=True)
    loop=models.CharField(max_length=100)
    purchaser = models.ForeignKey(User, related_name="purchases", on_delete=models.PROTECT)
    order=models.ForeignKey(Order, related_name="orders", on_delete=models.PROTECT)
    created_at=models.DateTimeField(auto_now_add=True)
    updated_at=models.DateTimeField(auto_now=True)

1 Ответ

0 голосов
/ 27 апреля 2019

Запуск makemigrations ничего не делает с базой данных, так что вы можете легко вернуть что-нибудь, если вы не запустили migrate.Все, что makemigrations делает, это создает файл.Если вам это не нравится, удалите его.Когда он выдает ошибку об ненулевом поле, параметры довольно явные.Просто прочитайте их:

Вы пытаетесь добавить необнуляемое поле 'foo' в панель без значения по умолчанию;мы не можем этого сделать (базе данных нужно что-то для заполнения существующих строк).Пожалуйста, выберите исправление:1) Укажите одноразовое значение по умолчанию (будет установлено для всех существующих строк с нулевым значением для этого столбца)2) Выйти, и позвольте мне добавить значение по умолчанию в models.pyВыберите один из вариантов:

Если вы выберете (1), то в дальнейшем клиент предложит вам ввести значение по умолчанию.После того, как вы это сделаете, он четко сообщит вам, что создал файл, и сообщит вам имя.

Если вы выберете (2), ничего не произойдет.Они оставляют на ваше усмотрение решение проблемы, которую вы можете сделать в модели, либо сделав поле обнуляемым (добавьте null=True в определении поля), либо присвоив ему значение по умолчанию (default=...).

Я бы посоветовал взглянуть на эти файлы, чтобы убедиться, что вы понимаете, что они делают.Это все довольно просто.Любой из них, который еще не запущен, может быть изменен.Вы можете редактировать их напрямую или удалить и восстановить их.

Чтобы увидеть, какие из них были запущены, используйте showmigrations .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...