Django: как обновлять модели
Я хочу обновить модель в django это модель в models.py:
class Article(models.Model):
CATEGOTY = (
('programming', 'programming'),
('other', 'other')
)
title = models.CharField(max_length=100, null=False)
content = models.TextField(null=False)
category = models.CharField(max_length=100, choices=CATEGOTY, null=False)
creation = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
def __str__(self):
return self.title
например, я хочу добавить slug в эту модель следующим образом:
slug = models.SlugField(max_length=100, null=False)
но когда я отображаю py manage.py makemigrations, мне показывается следующее:
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
what should I enter if I select option 1? if i type datetime.date.today()
It gives me an error that says: TypeError: function missing required argument 'year' (pos 1)
Вы можете удалить предыдущие миграции, а затем попытаться мигрировать снова, я думаю, что это сделает работу. но проблема в том, что это удалит все записи.
Когда вы добавляете обязательное поле, когда таблица не пуста, вам необходимо предоставить системе информацию для заполнения нового поля. Для этого у вас есть 2 варианта:
- определите правило для значения по умолчанию
- выберите вариант 2 и для каждой строки вам будет предложено ввести значение
Для варианта 1, возможно, следует использовать функцию slugify() (из модуля django.utils.text)
Иногда я добавляю правило в определение модели, чтобы убедиться, что существующие строки будут обновлены, затем я снимаю ограничения и управляю значениями с помощью приложения.