Почему Django устанавливает значения по умолчанию для всех существующих атрибутов модели?

У меня есть модель под названием Book. Book имеет следующие атрибуты: title, release_date и condition, где condition имеет значение по умолчанию "new". Я создал несколько Книг в админке django. После этого я создал новый атрибут для этой модели под названием category, который по умолчанию имеет значение Non-fiction. Почему django устанавливает category = "new" для всех существующих книг вместо "No category". Для книг, которые я добавляю после миграции, Django устанавливает их правильно. Почему это происходит.

class Book(models.Model):
class ConditionType(models.TextChoices):
    USED = "Used"
    NEW = "New"

class Category(models.TextChoices):
    ACTION_ADVENTURE = "Action and Adventure"
    CLASSIC = "Classic"
    MYSTERY = "Mystery"
    FANTASY = "Fantasy"
    HORROR = "Horror"
    LITERERY_FICTION = "Literary Fiction"
    SCIENCE_FICTION = "Science Fiction"
    NON_FICTION = "Non-Fiction"
    NO_CAT = "No category"

title = models.CharField(
    max_length=150,
    null=False,
)
release_date = models.DateField()
condition = models.CharField(
    max_length=12,
    choices=ConditionType.choices,
    default=ConditionType.NEW,
)
category = models.CharField(
    max_length=40,
    choices=Category.choices,
    default=Category.NO_CAT,
)

После первой миграции я добавил поле категории btw.

Насколько я знаю, django требует значения некоторого поля (как NULL) для существующих строк в базе данных. Возможно, вы случайно набрали "new", когда он попросил вас заполнить эти пустые значения полей?

Вернуться на верх