【问题标题】:Django create a new column in an already existing tableDjango 在已经存在的表中创建一个新列
【发布时间】:2020-08-25 01:20:08
【问题描述】:

我正在使用 Django 3.0.5,我正在尝试在表中创建一个新列。

表格如下所示:

class VacationModel(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    emp_id = models.IntegerField()
    email = models.EmailField()
    from_date = models.DateField()
    to_date = models.DateField()
    reason = models.TextField()
    time_sent = models.DateTimeField("date sent")
    req_approved = models.BooleanField(default=False, null=True)
    req_denied = models.BooleanField(default=False, null=True)
    # daysoff_given = models.IntegerField()

    def __str__(self):
        return self.emp_id

新列将是daysoff_given。我尝试添加此列,在运行 python manage.py makemigrations 后出现错误提示 django.db.utils.OperationalError: no such column

我尝试遵循其他一些答案,并删除了在 migrations 文件夹中进行的迁移,而不删除 __init__.py 文件。再次运行makemigrations 后出现同样的错误,然后我删除了整个模型并制作了一个新模型。

我认为我的数据库已损坏,但有没有实际的方法可以避免这种情况,因为它已经发生了两次。

每当我尝试添加新列时,它总是会抛出该错误并且我无法继续。我该如何解决这个问题?

【问题讨论】:

  • “我删除了在 migrations 文件夹中进行的迁移”——为什么这么多人急于对他们的迁移进行核对?这是一个剧烈的步骤,实际上应该从不需要。我希望您保留一份副本,以便您可以将它们放回去。
  • 您在创建新迁移后是否使用python manage.py migrate 应用新迁移?
  • @Chris 是的,我在创建模型后应用了新的迁移。所做的唯一更改是 daysoff_given 字段,问题发生在运行 makemigrations
  • “运行makemigrations之后”是什么意思?作为运行makemigrations 的一部分,您是否收到此错误?如果不是,“之后”是什么意思?是什么导致它出现?错误的完整追溯是什么?
  • 尝试删除迁移和数据库,然后进行迁移和迁移。它应该可以工作

标签: python python-3.x django django-models


【解决方案1】:

我认为问题在于您创建了迁移但没有应用它们。确保在模型中添加列后运行以下两个命令。

  • python manage.py makemigrations
  • python manage.py migrate

它不起作用,请编辑您的问题并添加完整的引用错误以帮助我们了解导致错误的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 2011-11-21
    • 2020-11-05
    相关资源
    最近更新 更多