我从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中添加默认值选择一个选项:
添加或删除字段的正确方法是什么?
答案 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)现在提供一次性默认值(将在所有现有行上设置此列的空值)
按1
和enter
键。输入""
然后django将设置所有旧数据genre=""
。