Django:如何在sqlite3数据库中添加/删除字段?

时间:2018-05-30 11:15:07

标签: django database python-3.x sqlite

我从YouTube课程开始学习Django。

在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

我在迁移后的歌曲中添加了流派。这就是我在添加数据时遇到问题的原因。 在交互式shell中,如果我尝试save(),它会显示没有'类型'领域。如果我再次尝试迁移,它会显示如下内容:

  

您正在尝试添加一个不可为空的字段'类型'没有一首歌   默认;我们不能这样做(数据库需要填充一些东西   现有的行)。请选择修复:

     

1)现在提供一次性默认值   (将在此列的所有现有行上设置空值)

     

2)退出,让我在models.py中添加默认值选择一个选项:

添加或删除字段的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

default=""添加到genere字段

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不知道如何在没有genere字段的情况下处理插入到数据库中的旧数据。因此,您应使用null=True或其他默认值default=""将其设置为空。

您也可以保留您的代码。但是当你使用migrate命令时,你应该告诉django你会给出一个像django推荐的默认值:

  

1)现在提供一次性默认值(将在所有现有行上设置此列的空值)

1enter键。输入""然后django将设置所有旧数据genre=""