Django: Как я могу добавить / удалить поля в базе данных sqlite3? - PullRequest
0 голосов
/ 30 мая 2018

Я начал изучать Джанго с курса YouTube.

В файле models.py есть два класса.

class Album(models.Model):
    artist = models.CharField(max_length = 250)
    album_title = models.CharField(max_length = 250)
    album_logo = models.CharField(max_length = 1000)

    def __str__(self):
        return self.album_title + ' - ' + self.artist


class Song(models.Model):
     album = models.ForeignKey(Album, on_delete=models.CASCADE)
     file_type = models.CharField(max_length=10)
     song_title = models.CharField(max_length=250)
     genre = models.CharField(max_length=250)

    def __str__(self):
        return self.song_title

Я добавил жанр в Песню после миграция .Вот почему у меня проблемы при добавлении данных.В интерактивной оболочке, если я пытаюсь сохранить (), она показывает, что поле 'жанр' отсутствует.Если я пытаюсь мигрировать снова, он показывает что-то вроде этого:

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

1) Укажите одноразовое значение по умолчанию (будет установлено для всех существующих строк с нулевым значением для этого столбца)

2) Выйти, и позвольте мне добавитьпо умолчанию в models.py Выберите параметр:

Как правильно добавлять или удалять поля?

1 Ответ

0 голосов
/ 30 мая 2018

добавить default="" к полю генерации

class Song(models.Model):
    album = models.ForeignKey(Album, on_delete=models.CASCADE)
    file_type = models.CharField(max_length=10)
    song_title = models.CharField(max_length=250)
    genre = models.CharField(max_length=250, default="")

    def __str__(self):
        return self.song_title

Как показывает сообщение об ошибке, вы добавляете поле genre к Song модели, не добавляя к ней default="" и null=True параметров.При переносе django не знает, как обращаться со старыми данными, которые были вставлены в базу данных без поля жанра.Таким образом, вы должны установить для них значение NULL с null=True или другое значение по умолчанию с default="".

Вы также можете просто сохранить свой код.Но когда вы используете команду migrate, вы должны указать django, что вы дадите значение по умолчанию, как рекомендовано django:

1) Укажите одноразовое значение по умолчанию (будет установлено во всех существующих строках)с нулевым значением для этого столбца)

нажмите клавиши 1 и enter.введите "" и затем django установит все старые данные genre="".

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