【问题标题】:Django: How can I add/delete fields in sqlite3 database?Django:如何在 sqlite3 数据库中添加/删除字段?
【发布时间】:2018-11-09 05:23:44
【问题描述】:

我已经开始通过 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

迁移后,我在歌曲中添加了流派。这就是为什么我在添加数据时遇到问题的原因。 在交互式外壳中,如果我尝试 save() ,它显示没有“流派”字段。如果我再次尝试迁移,它会显示如下内容:

您正在尝试将不可为空的字段“流派”添加到没有 默认;我们不能那样做(数据库需要一些东西来填充 现有行)。请选择一个修复:

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

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

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

【问题讨论】:

  • 只选择1. 并输入存在记录的默认值。

标签: django database python-3.x sqlite


【解决方案1】:

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 将它们设置为null,或者使用default="" 将它们设置为其他默认值。

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

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

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

【讨论】:

  • 要对此进行扩展,您的首要任务是成功迁移,以便拥有一个正常工作的应用程序。然后,您可以编辑每条记录并输入适当的genre 值。
  • 我按照你说的做了。现在它显示:添加到 Song 的流派。但是还是有问题。如果我在交互式 shell 中添加一些数据并保存它,它会显示 django.db.utils.OperationalError: table music_song has no column namedgenre
  • 如错误消息所示,您的 music_song 表中没有名为流派的列。你有没有运行命令python manage.py migrate
  • 是的,我做到了。之后出现了这个文本:流派字段添加到歌曲
  • 终于搞定了。我必须输入两个命令:python manage.py makemigrations musicpython manage.py migrate。我忘了。现在好了。
猜你喜欢
  • 2016-09-05
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 2021-11-29
相关资源
最近更新 更多